Удалить строку содержит частичный тип даты строка типа - PullRequest
0 голосов
/ 17 апреля 2020

В моей базе данных есть столбец с именем datetime:

open    high    low     close   volume  datetime

282.38  282.74  282.35  282.69  178326  2020-04-16 15:54:00.000
282.69  282.82  282.37  282.82  107392  2020-04-16 15:55:00.000

Теперь я хочу удалить все строки, где datetime содержит 2020-04-16 15

Код:

DELETE
FROM [database].[dbo].[table]
WHERE datetime LIKE '%2020-04-16 15%'

или Код:

DELETE
FROM [database].[dbo].[table]
WHERE CONTAINS (datetime,'2020-04-16 15')

Результат:

Сообщение 7601, Уровень 16, Состояние 2, Строка 3 Не удается использовать СОДЕРЖАНИЕ или предикат FREETEXT для таблицы или индексированного представления «database.dbo.table», поскольку он не полнотекстовый индексированный. Время завершения: 2020-04-16T16: 50: 22.8126553-05: 00

1 Ответ

4 голосов
/ 17 апреля 2020

Если ваш столбец datetime имеет тип данных datetime (потому что в противном случае ваша первая попытка будет работать), вы не сможете использовать like с этим форматом, потому что он не хранится в виде строки.

И contains только для полнотекстового индекса - столбец даты и времени отсутствует.

Попробуйте использовать окно даты и времени, например

DELETE
FROM [database].[dbo].[table]
WHERE datetime >= '2020-04-16 15:00:00.000'
AND datetime < '2020-04-16 16:00:00.000';

Обновление от Мартина Смита: вы можете использовать like против В столбце datetime он будет просто неявно преобразован в varchar со стилем 0, поэтому для языка Engli sh необходимо будет использовать шаблон типа Apr 16 2020 3:%PM. Но, конечно, это не очень хорошая идея по нескольким причинам.

...