Решение загадки даты и времени в SQL Server - PullRequest
0 голосов
/ 13 мая 2019

Я новичок в этом, и буду признателен, если вы поможете мне понять, как я могу решить мою проблему с форматом datetime в SQL Server.

Я пытаюсь найти несколько уникальных заказов на определенную дату:

select count(distinct(ID))
from dbo.Orders 
where CompletdDate like '2019-05-10%'

Но произошла ошибка:

Сообщение 207, Уровень 16, Состояние 1, Строка 53
Неверное имя столбца 'CompletdDate'.

Может, кто-нибудь знает, как это решить? Некоторые люди говорят, что я должен объявить заявление, но я понятия не имею, как и для чего?

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 13 мая 2019

Если CompletdDate на самом деле является столбцом даты, то вам нужно просто проверить равенство:

SELECT COUNT(DISTINCT ID)
FROM dbo.Orders
WHERE CompletdDate = '2019-05-10';

Если CompletdDate - это дата и время, и вы хотите ограничиться только данной датой, тогда выможет попробовать сыграть:

WHERE CONVERT(date, CompletdDate) = '2019-05-10';

Или, возможно, использовать диапазон:

WHERE CompletdDate >= '2019-05-10' AND CompletdDate < '2019-05-11';

Примечание. После просмотра ответа Гордона, возможно, CompletdDate должно быть CompletedDate.Но это всего лишь опечатка, а не основная структурная проблема вашего запроса.

0 голосов
/ 13 мая 2019
select count(distinct(ID)) from dbo.Orders where
TRY_CONVERT(VARCHAR(10), CompletdDate, 105) = '10-05-2019'

Если CompletdDate равно нулю, и вы используете функцию преобразования или другую функцию приведения, тогда ваш запрос будет ошибочным.вы должны использовать TRY_CONVERT или TRY_CAST, потому что эта функция возвращает ноль, когда столбец не может конвертироваться

0 голосов
/ 13 мая 2019

У вас есть несколько ошибок. Во-первых, вы не должны использовать строковые операции с датами. SQL Server имеет хорошую функциональность даты.

У вас неверное название столбца. Я ничего не могу с этим поделать. Но запрос должен выглядеть примерно так:

select count(distinct o.ID))
from dbo.Orders o
where convert(date, CompletedDate) = '2019-05-10'
---------------------------^ maybe the "e" was missing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...