Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да извлечете числа от низ с помощта на TSQL

Изглежда, че вече имате решение, което отговаря на вашите нужди, но имам малък трик, който използвам, за да извлека числа от низове, които смятам, че могат да бъдат от полза за някого. Той се възползва от оператора FOR XML и избягва изричните цикли. Прави добра вградена таблична функция или прост скалар. Правете с него каквото искате :)

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Много сложен проблем със SQL заявка

  2. Как да променя паролата sa в SQL Server 2008 express?

  3. Сравнение на цената с множество магазини в sql

  4. SQL заявка за намиране на редове само със специални знаци

  5. Получаване на името на базата данни от база данни на SQL Server Express в Visual Studio