Похоже, что SQL Server правильно интерпретирует неподдерживаемые строковые литеральные форматы - PullRequest
1 голос
/ 08 октября 2019

Иметь экземпляр SQL Server 2012, который, по-видимому, правильно интерпретирует строковые литеральные даты, форматы которых не указаны в документах (хотя обратите внимание, что эти документы предназначены для SQL Server 2017).

Например. У меня есть TSV со столбцом дат в формате %d-%b-%y (см. https://devhints.io/datetime#date-1), который выглядит как "25-FEB-93". Однако, это выдает ошибки типа при попытке скопировать данные в SQL Serverтаблицы (через mssql-tools bcp двоичный файл). Тем не менее, при тестировании на другой таблице в SQL Server, я могу сделать что-то вроде ...

select top 10 * from account where BIRTHDATE > '25-FEB-93'

без каких-либо ошибок. Все это, даже еслиданный формат не указан в документации для приемлемых форматов даты и, по-видимому, его также нельзя использовать в качестве строкового литерала при записи в новых записях. Кто-нибудь может объяснить, что здесь происходит?

1 Ответ

2 голосов
/ 08 октября 2019

указанный формат не указан в документации для допустимых форматов даты

Это означает, что он не поддерживается и не имеет документированного поведения. Есть много строк, которые при определенных региональных настройках будут конвертироваться из-за причуд в реализации синтаксического анализа.

Это путь кода, критичный к производительности, поэтому строковые форматы не подвергаются строгой проверке при преобразовании. Предполагается, что строки поддерживаются в поддерживаемом формате.

Поэтому вам может потребоваться загрузить столбец как varchar (n), а затем преобразовать его. Например,

declare @v varchar(200) = '25-FEB-93'
select convert(datetime,replace(@v,'-',' '),6)

Для формата docs 6 - dd mon YY, но обратите внимание, что это преобразование "работает" без замены - на , но это примерповедение, которое вы наблюдали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...