SQL в запросе используется формат ГГГГ-ДД-ММ, когда таблица - ГГГГ-ММ-ДД - PullRequest
0 голосов
/ 16 июня 2020

Если я запустил запрос:

select    startdate, count(*)
from      tablename
where     startdate > '2020-04-06'

Он возвращает только значение, дата начала которого находится после 4 июня 2020 года. Однако даты в таблице находятся в формате ГГГГ-ММ-ДД ЧЧ: мм: ss.sss.

Если я запустил getdate () или sysdatetime (), он вернет 2020-06-16 14: 29: 29.157 в правильном формате.

Итак, почему запрос использует ГГГГ-ДД-ММ? И как мне изменить его по умолчанию?

PS Я знаю, что могу использовать CONVERT или FORMAT в запросе, но, поскольку все даты будут в формате YYYY-MM-DD, я бы чтобы это было по умолчанию, и не нужно было каждый раз писать дополнительный код.

EDIT: я использую Microsoft SQL Server Management Studio

EDIT2: я проверил с коллегой и то же самое происходит и с ними.

Ответы [ 2 ]

4 голосов
/ 16 июня 2020

Это зависит от различных настроек. Вы можете обойти это, удалив дефисы:

startdate > '20200406'

В SQL Server этот формат всегда однозначный, ГГГГММДД. Я предпочитаю вариант с дефисами, потому что он более стандартный. Но если вы рассматриваете это как проблему, я бы предложил использовать однозначный формат SQL Server.

2 голосов
/ 16 июня 2020

Вы можете обработать это двумя способами:

  1. На уровне сеанса. вы можете установить формат и выдать запрос

  2. Использовать формат ISO 8601 (рекомендуется)

DECLARE @table table(a datetime)
INSERT INTO @table values('2020-04-06')

SELECT * FROM @table WHERE A = '2020-04-06' -- ISO 8601

set dateformat ymd
SELECT * FROM @table WHERE A = '2020-04-06' -- Format change
...