Подчеркивание и левая функция - PullRequest
0 голосов
/ 25 августа 2018

У меня есть столбец, значения которого выглядят следующим образом:

17_data ...

18_data ...

1801151 ... data

Данные не самые чистые в этих столбцах, поэтому я пытаюсь использовать ЛЕВУЮ функцию для определения строк, в которых год 2017 сопровождается подчеркиванием LEFT(column, 3) = '17[_]' Это не возвращаетодин столбец.Поэтому для устранения неполадок я добавил это предложение WHERE в оператор SELECT, чтобы увидеть, что возвращалось, и получил значение 175, где фактические первые три символа равны «17 _».

Почему это так и как можноЯ структурирую свое предложение WHERE, чтобы подобрать эти строки?

1 Ответ

0 голосов
/ 25 августа 2018

Когда вы пытались добавить 'where' с правилом LEFT(column, 3) = '17[_]', оно было обречено на провал.Оператор '=' выполняет точное сравнение: обе стороны должны быть равны.То есть он будет искать строки, чьи первые 3 символа (слева, 3) равны 17[_], то есть 5 символов, один, семь, скобка, подчеркивание, скобка.Текст из 3 символов никогда не будет точно соответствовать 5 символам.

Вы должны были написать просто:

WHERE  LEFT(column, 3) = '17_'

Я думаю, у вас есть идея добавить скобку из чтенияо как шаблоны.Оператор LIKE позволяет искать строки, содержащиеся в начале / конце / середине данных.

WHERE column LIKE 'mom%'    - starts with mom
WHERE column LIKE '%dad'    - ends with dad

и т. Д.LIKE поддерживает «%», означающее «и затем текст любой длины», а также «_», означающее «и только один символ».Это создает проблему: когда вы хотите сказать «начинается с _mom», вы не можете написать

WHERE column LIKE '_mom%'

, поскольку оно также будет соответствовать 9mom, Bmom и т. Д., Поскольку _ означает «любойперсонаж'.Вот почему в таких случаях, только в LIKE, вы должны написать подчеркивание в скобках:

WHERE column LIKE '[_]mom%'      - starts with _mom

Зная это, очевидно, что вы также можете построить свои «начинается с 17_» с LIKE:

SELECT column1, column2, ..., columnN
FROM sometable
WHERE column LIKE '17[_]%'
...