#sql #sqlite #substring
#sql #sqlite #подстрока
Вопрос:
Я работаю с sqlite в записной книжке goole colab. У меня есть идентификатор печатного актера, который работал до 1970 года. И это мой sql-запрос
SELECT PID FROM M_Cast mc JOIN Movie m on mc.MID=m.MID WHERE m.year< 1970;
Но у меня это не очень хорошо получилось (я не получил точного результата). Но когда я редактирую свой запрос на
SELECT PID FROM M_Cast mc JOIN Movie m on mc.MID=m.MID WHERE CAST(SUBSTR(M.year,-4) AS UNSIGNED) < 1970;
Я получаю точный результат, может ли кто-нибудь объяснить разницу между этими утверждениями CAST(SUBSTR(M.year,-4) AS UNSIGNED) < 1970
и m.year<1970
.
Комментарии:
1. Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только используемую вами базу данных. Образцы данных и желаемые результаты также помогут, поэтому ясно, что означает «другой ответ». И каков тип
year
? В одном контексте он используется как число, а в другом — как строка.
Ответ №1:
Было бы нормально, если бы столбец с именем year
хранил целочисленные 4-значные значения, но поскольку ваш 1-й запрос не работает, это означает, что это не так.
Кроме того, поскольку ваш 2-й запрос работает, это означает, что последние 4 символа столбца содержат год, в котором был снят каждый фильм.
Поэтому проверьте столбец year
в таблице Movie
на наличие нецелочисленных значений.
Простой способ сделать это с помощью:
SELECT * FROM Movie WHERE LENGTH(year) > 4