ऐसा लगता है कि आपके पास पहले से ही एक समाधान है जो आपकी आवश्यकताओं को पूरा करता है, लेकिन मेरे पास एक छोटी सी तरकीब है जिसका उपयोग मैं स्ट्रिंग्स से नंबर निकालने के लिए करता हूं जो मुझे लगा कि किसी को फायदा हो सकता है। यह फॉर एक्सएमएल स्टेटमेंट का फायदा उठाता है और स्पष्ट लूप से बचा जाता है। यह एक अच्छा इनलाइन टेबल फ़ंक्शन या साधारण स्केलर बनाता है। इसके साथ वही करें जो आप करेंगे :)
DECLARE @String varchar(255) = 'This1 Is2 my3 Test4 For Number5 [email protected]';
SELECT
CAST((
SELECT CASE --// skips alpha. make sure comparison is done on upper case
WHEN ( ASCII(UPPER(SUBSTRING(@String, Number, 1))) BETWEEN 48 AND 57 )
THEN SUBSTRING(@String, Number, 1)
ELSE ''END
FROM
(
SELECT TOP 255 --// east way to get a list of numbers
--// change value as needed.
ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 ) ) AS Number
FROM master.sys.all_columns a
CROSS JOIN master.sys.all_columns b
) AS n
WHERE Number <= LEN(@String)
--// use xml path to pivot the results to a row
FOR XML PATH('') ) AS varchar(255)) AS Result
परिणाम ==> 1234510