У меня есть следующий сценарий. Поле VARCHAR может иметь только 1 из 2 значений:SQL - подсчет INT из поля VARCHAR
'12345 - some random text'
'87654321 - some random text'
Я хочу сделать выбор только значения INT и используя этот следующий запрос я нахожусь почти там, но я не хватает одного ключевого компонента:
SELECT
CASE
WHEN (ColumnName LIKE '%[0-9][0-9][0-9][0-9][0-9]%')
then SUBSTRING(ColumnName ,0 ,CHARINDEX('',ColumnName)+6)
WHEN (ColumnName LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%')
then SUBSTRING(ColumnName ,0 ,CHARINDEX('',ColumnName)+9)
ELSE (NULL) END
FROM dbo.TableName
Фактический результат:
12345
87654
Ожидаемый результат:
12345
87654321
Пожалуйста, кто-нибудь может указать на одну простую вещь, которую мне не хватает?
У ЛЕВЫЙ до первого символа пробела, отлитый результат в целое. – jarlh
Или просто переключитесь на порядок вещей, самый длинный, как первый ... – jarlh
Рассмотрим рефакторинг схемы. Если такого рода вещи (два поля данных, упакованные в одно поле) часто требуют разделения, превратите их в два отдельных поля. Легче и гораздо быстрее конкатенировать два поля, когда это необходимо, чем искать разделитель в составном поле. Двухполевой подход непосредственно индексируется, а одно поле - нет. – wallyk