+ 1 за ответ Гордона. Это забавная проблема, которую вы можете решить, используя TRANSLATE , если вы используете SQL 2017+.
Во-первых, если вы никогда не использовали его, Per BOL TRANSLATE
:
Возвращает строку, предоставленную в качестве первого аргумента после некоторых указанных символовво втором аргументе переводятся в набор символов назначения, указанный в третьем аргументе. 2
This:
SELECT TRANSLATE('123AABBCC!!!','ABC','XYZ');
Возвращает: 123XXYYZZ !!!
Вот решение с использованием TRANSLATE:
-- Sample Data
DECLARE @t TABLE (ID_Sample CHAR(6))
INSERT @t (ID_Sample) VALUES ('AB001'),('BC003'),('AB100'),('BC400'),('CC555');
-- Solution
SELECT
ID_Sample = t.ID_Sample,
ID_Sample_Int = s.NewString
FROM @t AS t
CROSS JOIN (VALUES('ABCDEFGHIJKLMNOPQRSTUVWXYZ', REPLICATE(0,26))) AS f(S1,S2)
CROSS APPLY (VALUES(TRY_CAST(TRANSLATE(t.ID_Sample,f.S1,f.S2) AS INT))) AS s(NewString)
WHERE s.NewString >= 100;
Без фильтра предложений WHERE вы получите:
ID_Sample ID_Sample_Int
--------- -------------
AB001 1
BC003 3
AB100 100
BC400 400
CC555 555
... предложение WHERE отфильтровывает первые две строки.