Проблемы с оператором между датами - PullRequest
0 голосов
/ 22 апреля 2019

Я практикую и экспериментирую с другим синтаксисом оператора SQL BETWEEN в отношении дат из "https://www.w3schools.com/sql/sql_between.asp"

. Это таблица Order в моей базе данных:

ССЫЛКА: https://www.w3schools.com/sql/sql_between.asp

Запрос извлекает даты заказа между заданным условием двух дат.

Это две основные версии синтаксиса (согласно w3schools):

SELECT *
FROM Orders
WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;

и:

SELECT * 
FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

Вывод, который мы получаем при наборе двух вышеупомянутых запросов из таблицы Orders

Количество записей: 22 (из 196 записей). Даэто правильно.

Теперь я экспериментирую с версиями этого синтаксиса.

CASE # 1:

SELECT * 
FROM Orders
WHERE OrderDate BETWEEN #1996/07/01# AND #1996/07/31#;

Результат случая # 1: 22 (такой же, как и вышесинтаксис)

В редакторе SQL пробуйте его (https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_between_date&ss=-1) заявляют, что этот оператор SQL не поддерживается в базе данных WebSQL. Этот пример по-прежнему работает, поскольку использует измененную версию SQLПОЧЕМУ ТАК?

1 Ответ

0 голосов
/ 22 апреля 2019

Если вы используете редактор W3Schools Tryit в Chrome, вы используете WebSQL , который в основном SQLite .

SQLite не имеет формата даты / времени, поэтому, вероятно, хранит значения даты в виде строк, отформатированных в формате ISO-8601 (см. этот ответ для получения дополнительной информации).

Другие системы баз данных (например, Oracle, Microsoft SQL Server, Postgres, MySQL) имеют встроенные форматы даты, и вы обычно представляете их как строки (заключенные в одинарные кавычки). Например: '1997-07-01' (в зависимости от конкретной СУБД могут быть более конкретные соображения).

Формат, в котором используются знаки фунта (например, #7/1/1997#), уникален для Microsoft Access (см. этот ответ для получения дополнительной информации).

<ч />

Итог: даты обычно заключаются в одинарные кавычки. Лучше всего придерживаться стандарта ISO-8601 (например, 1997-07-01).

Если вы изучаете SQL, есть и другие ресурсы, кроме W3Schools. Я бы порекомендовал загрузить СУБД с открытым исходным кодом, например Postgres или MySQL, настроить образец базы данных и поработать над некоторыми запросами. Такие сайты, как codewars также могут быть полезны

<ч />

Еще одна вещь: не используйте BETWEEN для дат. Используйте >= и <, чтобы убедиться, что вы не исключаете даты с частью времени. Для получения дополнительной информации читайте этот блог .

...