powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в запросе получить формат только даты
11 сообщений из 11, страница 1 из 1
Как в запросе получить формат только даты
    #37132947
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

В таблице на сервере есть поле dt_let формата DATE.
Если использовать CAST, то в результате получаю символьное значение:

Код: plaintext
1.
?SQLEXEC(gnConnHandle, 'SELECT CAST(a.dt_let AS date) AS dt_let FROM Ref_letter a', 'Let')

Можно ли в запросе получить тоже только дату?

В поиске посмотрел - такое решение не нашел.


Среда: VFP9.0+SP1
Сервер:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37132955
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Мирный,

FAQ ?
Или что ты имеешь в виду?
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37132963
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ссылку.
Там варианты, которые приводятся, если использовать прямо в запросе не дают такого результата.
Хотелось бы прямо в запросе получить поле в формате только дата.

Если использовать такой запрос, то получается результат в формате datetime:
Код: plaintext
1.
?SQLEXEC(gnConnHandle, 'SELECT CAST(a.dt_let AS smalldatetime) AS dt_let FROM Ref_letter a', 'Let')
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37132974
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей МирныйСпасибо за ссылку.
Там варианты, которые приводятся, если использовать прямо в запросе не дают такого результата.
Хотелось бы прямо в запросе получить поле в формате только дата.

Если использовать такой запрос, то получается результат в формате datetime:
Код: plaintext
1.
?SQLEXEC(gnConnHandle, 'SELECT CAST(a.dt_let AS smalldatetime) AS dt_let FROM Ref_letter a', 'Let')

Нельзя получить того, чего нет!
Нет в SQL Server до версии 2008 типа данных DATE!
Или конвертните на клиенте или переходите на SQL 2008
С уважением, Алексей
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37132976
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K,

У меня как раз MSSQL 2008 - см. выше.
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37132980
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей МирныйAleksey-K,

У меня как раз MSSQL 2008 - см. выше.
Если SQL 2008, то все должно нормально работать. Поле Date с сервера возвращается в формате D в курсоре VFP
А поле dt_let какого типа у вас в таблице ?
Если Date, то зачем CAST?
И какой драйвер вы используете для работы из VFP с SQL 2008?
С уважением, Алексей
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37133006
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли SQL 2008, то все должно нормально работать. Поле Date с сервера возвращается в формате D в курсоре VFP
А поле dt_let какого типа у вас в таблице ?

в таблице - DATE

авторЕсли Date, то зачем CAST?

если CAST не использовать, то возвращается символьный тип (но и с CAST - тоже символьный):
Код: plaintext
1.
?SQLEXEC(gnConnHandle, 'SELECT a.dt_let FROM Ref_letter a', 'Let')

авторИ какой драйвер вы используете для работы из VFP с SQL 2008?

драйвер ODBC для SQL-сервера Microsoft, версия 03.85.1132
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37133009
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю тебе время на 00:00:00 надо всем датам сделать. Это так
Код: plaintext
?SQLEXEC(gnConnHandle, 'SELECT dateadd(dd, datediff(dd,0, a.dt_let), 0) AS dt_let FROM Ref_letter a', 'Let')
в 2008 есть тип DATE
Код: plaintext
?SQLEXEC(gnConnHandle, 'SELECT CAST(a.dt_let AS DATE) AS dt_let FROM Ref_letter a', 'Let')
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37133010
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Мирный, В строке подключения какой драйвер умоминается?
Для получения новых полей с SQL 2008 должен быть: SQL Server Native Client 10.0
С уважением, Алексей
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37133029
Юристишко-выпускник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ для справка:

курсорадаптер с включенной схемой
позволяет атоматически преобразовывать форматы "туда-сюда".

пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
close databases all

local lcConnString, lnConnection, ;
	loMyCAD as CursorAdapter, ;
	laErrors[ 1 ]

text to lcConnString noshow pretext  15 
	Driver=SQL Native Client;
	SERVER=.\SQLSERVER2005;
	DATABASE=test;
	uid=sa;
	pwd=as;
endtext	

lnConnection = sqlstringconnect(lcConnString)
if lnConnection<= 0 
   messagebox('не подцепился')
   return 
endif

text to lcSqlCmd noshow pretext  7 
	if object_id('tempdb..#t') is not null drop table #t
	create table #t ( [Id] [int] IDENTITY( 1 , 1 ) NOT NULL, bigDate datetime )
endtext
if sqlexec(lnConnection, lcSqlCmd)< 0 
	messagebox('не создал табличку')
    return 
endif 

loMyCAD = createobject('CursorAdapter')
with loMyCAD
	.Alias              = 'MyAlias'
	.DataSourceType     = 'ODBC'
	.DataSource         = lnConnection
	.SelectCmd          = "select * from #t"
	.Tables             = '#t'
	.BufferModeOverride =  5 
	.cursorschema       = "id i, bigDate d(8)"
	.keyFieldList		= 'Id'
	.UpdatableFieldList = 'bigDate'
	.updateNameList     = 'Id #t.Id, bigDate #t.bigDate'
	.usetransactions    = .f.
	if .CursorFill(.t.)
		for i= 1  to  10 
		   insert into MyAlias (bigDate) values (date())
		endfor
		select MyAlias
		brow
		if !tableupdate(.t.,.t.,.Alias)
			aerror(laErrors)
		    messagebox(laErrors[ 2 ])
		endif
		.cursorrefresh()
		browse title "Данные с сервера после апдейта"
	else
		aerror(laErrors)
		messagebox(laErrors[ 2 ])
	endif .CursorFill(.t.)
endwith
...
Рейтинг: 0 / 0
Как в запросе получить формат только даты
    #37133369
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KВ строке подключения какой драйвер умоминается?
Для получения новых полей с SQL 2008 должен быть: SQL Server Native Client 10.0
С уважением, Алексей

Установил драйвер Microsoft SQL Server 2008 Native Client Version 10.00.1600

и запрос вернул поле в формате DATE.

Всем спасибо за помощь!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в запросе получить формат только даты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]