Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
  SELECT CAST(N'2013-02-15 10:37:17.840' as datetime)


Почему на одной машине работает, а на другой ошибка?

[ODBC SQL Server Driver][SQL Server]Ошибка при преобразовании типа данных nvarchar к datetime.



    SELECT @@VERSION


Тут выполняется нормально (англ ОС, англ sql сервер):

Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

А тут эта ошибка (русская ОС, русский SQL сервер):
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)   Aug 19 2014 12:21:34   Copyright (c) Microsoft Corporation  Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 
28 авг 17, 18:58    [20754600]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
В приложение доступа нет, можно ли как-то настройками SQL Server сделать чтобы работало на второй?
28 авг 17, 19:00    [20754605]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
Точнее даже та ошибка была на SP2, когда поставил SP3 она стала по другому выглядеть:

Преобразование типа данных nvarchar в тип данных datetime привело к выходу значения за пределы диапазона.
28 авг 17, 19:01    [20754607]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
Все, разобрался, дольше пост писал

/* ALTER LOGIN sa WITH DEFAULT_LANGUAGE = us_english; */


По первой ошибке не гуглилось, по второй сразу нашел описание решения проблемы.
28 авг 17, 19:04    [20754618]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36698
https://www.sql.ru/faq/faq_topic.aspx?fid=109
28 авг 17, 19:05    [20754619]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Hett
Все, разобрался
Ага! Разобрался.
Писать запросы в расчёте на жёсткие условия выполнения - моветон.

А ведь достаточно заменить пробел в первом посте на букву T,
и получится строковое представление по стандарту ISO,
независящее от настроек сервера и сессии (126-q стиль функции CONVERT).

Можно также использовать формат 'YYYYMMDD hh:mm:ss.nnn'
29 авг 17, 10:06    [20755370]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
Hett
В приложение доступа нет, можно ли как-то настройками SQL Server сделать чтобы работало на второй?
29 авг 17, 10:07    [20755375]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
dashgh
Guest
declare @val nvarchar(4000) 

exec master.dbo.xp_regread 
    N'HKEY_CURRENT_USER',
    N'Control Panel\International',
    N'sShortDate',
    @val output
select @val
?
29 авг 17, 12:10    [20755753]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
На русском сервере:
dd.MM.yyyy
На английском сервере:
M/d/yyyy

Но в общем-то проблема уже вроде уже решена
29 авг 17, 12:13    [20755763]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Hett
На русском сервере:
dd.MM.yyyy
На английском сервере:
M/d/yyyy
Это должно быть совершенно неважно.
29 авг 17, 12:24    [20755813]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13622
Ну что попросили, я написал.
Формат даты тут вообще другой, поэтому я тоже к этом мнению склоняюсь.
29 авг 17, 12:40    [20755843]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
[quot iap]
Hett
Можно также использовать формат 'YYYYMMDD hh:mm:ss.nnn'
Всегда пишу константы дат в этом формате. Полёт нормальный.
29 авг 17, 12:57    [20755894]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
SFlash
Member

Откуда:
Сообщений: 143
Dmitry V. Liseev,

select CONVERT(DateTime,'2017/01/01',104)

Где 104 - формат даты времени, в справке по CONVERT описаны
CONVERT
29 авг 17, 14:08    [20756183]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
SFlash
Dmitry V. Liseev,

select CONVERT(DateTime,'2017/01/01',104)


Где 104 - формат даты времени, в справке по CONVERT описаны
CONVERT
104 - это DD.MM.YYYY,
а не то, что вы написали.
29 авг 17, 14:20    [20756219]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
hluio
Guest
как-то не всё так однозначно

/*
SELECT msg.language_id, lang.langid, alias 
FROM sys.messages AS msg
JOIN syslanguages AS lang
	ON lang.msglangid = msg.language_id
GROUP BY  msg.language_id, lang.langid, alias

EXEC sp_configure "default language", 21 -- Russian
RECONFIGURE WITH OVERRIDE

EXEC sp_configure "default language", 0
RECONFIGURE WITH OVERRIDE
*/

select cast(getdate() as varchar)
GO
CREATE LOGIN [test_ru] WITH PASSWORD=N'test', DEFAULT_LANGUAGE=[русский], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
EXECUTE AS LOGIN='test_ru'
select cast(getdate() as varchar)
REVERT
GO
CREATE LOGIN [test_jp] WITH PASSWORD=N'test', DEFAULT_LANGUAGE=[Japanese], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
EXECUTE AS LOGIN='test_jp'
select cast(getdate() as varchar)
REVERT
GO


или

set language 'English'

SELECT a.* ,[dtLocal]=CAST('11/12/17' as datetime)
FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;',
     'select [language] ,[date_format] ,[dtOpenRowSet]=CAST(''11/12/17'' as datetime) from sys.dm_exec_sessions where [session_id]=@@SPID') AS a
;

ALTER LOGIN [test] WITH DEFAULT_LANGUAGE = Japanese

SELECT a.* ,[dtLocal]=CAST('11/12/17' as datetime)
FROM OPENROWSET('SQLNCLI', 'DRIVER={SQL Server};Server=(local); Initial Catalog=master;uid=test;pwd=test;',
       'select [language] ,[date_format] ,[dtOpenRowSet]=CAST(''11/12/17'' as datetime) from sys.dm_exec_sessions where [session_id]=@@SPID') AS a
;

set language 'Japanese'

SELECT a.* ,[dtLocal]=CAST('11/12/17' as datetime)
FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;',
     'select [language] ,[date_format] ,[dtOpenRowSet]=CAST(''11/12/17'' as datetime) from sys.dm_exec_sessions where [session_id]=@@SPID') AS a
;
30 авг 17, 01:09    [20757466]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании типа данных nvarchar к datetime.  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Альтернативно можно использовать SET DATEFORMAT ymd
6 сен 17, 10:07    [20774532]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить