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

#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]