Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

sql server 2008 :sélectionner une sous-chaîne dans un champ

Décomposez-le en 2 étapes :

  1. tout jeter jusqu'au début du nombre (ici j'ai supposé 3 chiffres minimum)
  2. puis tout prendre jusqu'au prochain chiffre non numérique

Vous aurez besoin d'un CAS pour la GAUCHE si le nombre est à la fin car PATINDEX renverra zéro

DECLARE @MyTable TABLE (bigstring varchar(200))
INSERT @MyTable VALUES ('F:\MassHunter\DATA\6897_Pan_1\QuantResults\6897_Pan_1.batch.bin')
INSERT @MyTable VALUES ('F:\MassHunter\DATA\6897_Pan_1\QuantResults\6897_Pan_1.batch.bin')
INSERT @MyTable VALUES ('10914_Excel Short Summary.xls')

SELECT  --assumes number not at end of string
    LEFT(startOf, PATINDEX('%[^0-9]%', startof)-1)
FROM
    (
    SELECT  --assumed 3 digits minimum
        SUBSTRING(bigstring, PATINDEX('%[0-9][0-9][0-9]%', bigstring), 8000) AS startOf
    FROM
        @MyTable
    ) foo