У меня возникли проблемы с получением данных после даты и часа разделителя в этой таблице с именем Test:
Столбцы и примеры данных:
Я пробовал следующее:
SELECT *
FROM test
WHERE Date > 20090101
AND Hour > '15:22:33'
и:
SELECT a.id
FROM
(SELECT * FROM test
WHERE Date >= 20090101) AS a
WHERE a.Hour>= '15:22:33'
Однако оба запроса вернули этот результат:
когда ожидаемым результатом были все строки, так как все данные после 01.01.2009. Я понимаю, что проблема заключается в разделителе часов, однако я не могу обойти это.
В настоящее время я использую SQL Server Management Studio v18.
Вероятно, лучше хранить дату и время в одном столбце. Но я думаю, что логика, которую вы хотите, такова:
SELECT *
FROM test
WHERE Date > 20090102 OR
(Date = 20090102 AND Hour > '15:22:33')
Это возвращает все строки, в которых дата находится после 20090102 15:22:343.
Или, вы можете сформулировать это как:
WHERE CONVERT(datetime, CONCAT(date, ' ', hour)) > '2009-01-02 15:22:33'
Эта версия фактически предлагает модификацию таблицы с использованием вычисляемого столбца:
alter table test add column date_hour as
( CONVERT(datetime, CONCAT(date, ' ', hour)) );
Затем вы можете написать:
where date_hour > '2009-01-02 15:22:33'
И вы можете создать индекс в столбце date_hour
, чтобы повысить производительность.
В зависимости от языка это может быть проблемой. yyyy-MM-dd hh:mm:ss
не является однозначным (для типа данных datetime
). На самом деле, если вы не американец, дата будет читаться как yyyy-dd-MM hh:mm:ss
. Например, если вы англичанин (который, по словам Microsoft, не говорит по-английски???), приведенное выше будет ошибкой (если мы проигнорируем тот факт, что синтаксис на самом деле ADD
не ADD COLUMN
). дб<>рабочий пример
Это сработало! Спасибо!! Я понимаю, что было бы лучше хранить их в одном столбце, но эти данные поступают из ERP, и я мало что могу с этим поделать. Спасибо за подсказку!
столбец «Дата» - это не дата и время, а целое число, поэтому оно работает, когда мы используем ГГГГММДД, как предложил Гордон, поскольку наиболее значимое значение находится слева, немного беспорядочно, но я ничего не могу сделать, так как это ERP клиента
Тогда вам действительно нужно исправить дизайн. int
— это не дата, @thiagopleasehelp, а date
— это не число. Столбец, определенный как date int
, не имеет смысла; это по определению не свидание...
Как я уже сказал, это из базы данных клиента (на самом деле это очень крупная компания из Бразилии), я только разрабатываю для них вещи как терсеризованный сотрудник, вещи, которые вы найдете в бразильских базах данных, всегда вас удивят (в хорошем или плохом смысле). хахаха), для них, пока это работает, все в порядке. Но я согласен с вами
Лучший ответ - преобразовать «дату» и «час» в дату и время, а затем добавить их вместе.