Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 DateTime - печаль с ADO  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1094
exec sp_executesql N'select p.id id
                                                ,f.id fid
                                                ,t.parentid parentid
                                                ,rtrim(registrationnumber)+''(''+rtrim(serialnumber)+'')'' ac
                                                ,rtrim(plf.icaoCode)+'':''+rtrim(plt.icaoCode) leg
                                            from rplane p  
                                            join types t on t.id=p.model
                                            join flight f on f.ac=p.id
                                            join places plf on plf.id=f.place_from
                                            join places plt on plt.id=f.place_to
                                            where f.[date]=@date
                                            order by rtrim(registrationnumber)+''(''+rtrim(serialnumber)+'')''',N'@date datetime',@date='2015-09-30 00:00:00'

получаю ошибку -
Msg 8114, Level 16, State 5, Line 0
Ошибка при преобразовании типа данных varchar к datetime.
На клиенте передаю DateTime
public DataTable FlightsByDate(DateTime flightDate)


что не так?
1 окт 15, 15:19    [18221242]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
Glory
Member

Откуда:
Сообщений: 104751
waszkiewicz
что не так?

Вы опять в datetime суете неправильную символьную строку
1 окт 15, 15:22    [18221263]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1094
Glory,
сую не я, сует компонент Calendar. Забавно, что с INSERT прокатывает
1 окт 15, 15:32    [18221316]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
Glory
Member

Откуда:
Сообщений: 104751
waszkiewicz
сую не я, сует компонент Calendar.

Ну да, мопед не мой, я только объяву разместил.
1 окт 15, 15:33    [18221326]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
guest45
Guest
waszkiewicz,

Функции CAST и CONVERT (Transact-SQL)


SELECT CAST( -- это делает SQL Server
		CONVERT( -- это может делать Windows, зависит от настроек в Control Panel
			VARCHAR(100),CAST('2015-05-30' AS DATETIME),2		-- 2,3,3,5,11
		)
	AS DATETIME)

Msg 242, Level 16, State 3, Line 3
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
1 окт 15, 16:14    [18221618]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
waszkiewicz
что не так?
Наверно, DATEFORMAT на клиентском компьютере и на сервере разные.
Действительно, Microsoft тупо формирует дату в формате, зависящим от разных настроек.
Ну засовывали бы на место пробела букву T, - и всё было бы всегда нормально. Так нет же!
1 окт 15, 17:19    [18222122]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
В TRY_PARSE можно напрямую указывать локаль.

https://msdn.microsoft.com/en-us/library/hh213126.aspx
1 окт 15, 18:05    [18222406]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
a_voronin,

-- different countries use different date formats

-- Parsing d-m-y
select TRY_PARSE('08-14-1969' AS datetime USING 'en-US')  -- RETURNS   1969-08-14 00:00:00.000
select TRY_PARSE('14-08-1969' AS datetime USING 'en-US')  -- RETURNS   NULL

-- Parsing m-d-y
select TRY_PARSE('08-14-1969' AS datetime USING 'en-NZ')  -- RETURNS   NULL
select TRY_PARSE('14-08-1969' AS datetime USING 'en-NZ')  -- RETURNS   1969-08-14 00:00:00.000
1 окт 15, 18:06    [18222415]     Ответить | Цитировать Сообщить модератору
 Re: DateTime - печаль с ADO  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
a_voronin
a_voronin,

-- different countries use different date formats

-- Parsing d-m-y
select TRY_PARSE('08-14-1969' AS datetime USING 'en-US')  -- RETURNS   1969-08-14 00:00:00.000
select TRY_PARSE('14-08-1969' AS datetime USING 'en-US')  -- RETURNS   NULL

-- Parsing m-d-y
select TRY_PARSE('08-14-1969' AS datetime USING 'en-NZ')  -- RETURNS   NULL
select TRY_PARSE('14-08-1969' AS datetime USING 'en-NZ')  -- RETURNS   1969-08-14 00:00:00.000
Он, небось, просто параметры в запросе пишет, как положено, и всё.
А запрос-то действительно драйвер ADO формирует. И криво, по всей видимости.
Предлагаете везде вот такой вот винегрет городить?
1 окт 15, 19:32    [18222848]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить