Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в запросе получить формат только даты / 11 сообщений из 11, страница 1 из 1
24.02.2011, 07:44
    #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
24.02.2011, 08:18
    #37132955
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить формат только даты
Сергей Мирный,

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

Если использовать такой запрос, то получается результат в формате datetime:
Код: plaintext
1.
?SQLEXEC(gnConnHandle, 'SELECT CAST(a.dt_let AS smalldatetime) AS dt_let FROM Ref_letter a', 'Let')
...
Рейтинг: 0 / 0
24.02.2011, 08:53
    #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
24.02.2011, 08:55
    #37132976
Сергей Мирный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить формат только даты
Aleksey-K,

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

У меня как раз MSSQL 2008 - см. выше.
Если SQL 2008, то все должно нормально работать. Поле Date с сервера возвращается в формате D в курсоре VFP
А поле dt_let какого типа у вас в таблице ?
Если Date, то зачем CAST?
И какой драйвер вы используете для работы из VFP с SQL 2008?
С уважением, Алексей
...
Рейтинг: 0 / 0
24.02.2011, 09:19
    #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
24.02.2011, 09:24
    #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
24.02.2011, 09:24
    #37133010
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить формат только даты
Сергей Мирный, В строке подключения какой драйвер умоминается?
Для получения новых полей с SQL 2008 должен быть: SQL Server Native Client 10.0
С уважением, Алексей
...
Рейтинг: 0 / 0
24.02.2011, 09:35
    #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
24.02.2011, 11:58
    #37133369
Сергей Мирный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе получить формат только даты
Aleksey-KВ строке подключения какой драйвер умоминается?
Для получения новых полей с SQL 2008 должен быть: SQL Server Native Client 10.0
С уважением, Алексей

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

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

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


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