#sql
#sql
Вопрос:
Я пытаюсь вернуть столбец в sql, который должен возвращать 4 символа из столбца, когда символ начинается с алфавита, для числового он должен возвращать только 3 символа. Например:
column:
B98497
C68756
r45789
123467
578912
вывод:
приведенный выше столбец должен возвращать следующее
column:
B984
C687
r457
123
578
Я использовал следующий код, но он возвращает только первые три символа
моего кода:
select substring(column,1,3)
from table
вывод для моего кода:
column
B98
C68
r45
123
578
как мне получить такой вывод:
B984
C687
r457
123
578
Комментарии:
1. Используйте выражение регистра, чтобы решить, должно ли оно состоять из 3 или 4 символов.
2. Какая версия MySQL используется?
3. MySQL <> SQL Server. Я удалил эти конфликтующие теги, пожалуйста, пометьте только одну базу данных.
Ответ №1:
Один из методов:
select left(col, 3 (col rlike '^[a-zA-Z'))
При этом используется тот факт, что логические выражения оцениваются как 1 или 0 в контексте чисел.
Ответ №2:
Если вы уже используете MySQL 8.0, существует однострочный:
SELECT REGEXP_SUBSTR(column1, '[a-z]?[0-9]{3}') FROM Table1;
ДЕМОНСТРАЦИЯ. И вот соответствующая страница документа.
Если это 5.7, вы должны проверить первый символ на соответствие классу буквенных символов, например:
SELECT LEFT(column1, IF(column1 RLIKE '^[a-z]', 4, 3)) FROM Table1;
… что на самом деле можно упростить, как показано в ответе @GordonLinoff .
Ответ №3:
Следующее должно сделать
select
CASE WHEN substring(TheColumn, 1,1) LIKE '[0-9]' THEN substring(TheColumn, 1,3)
ELSE substring(TheColumn, 1, 4) END
from [dbo].[TabAlpNum]