sql >> Database >  >> RDS >> Sqlserver

Complexe soort veld string - nummer - string

Deze oplossing is betrouwbaarder dan het gekozen antwoord. Dit antwoord geeft mogelijk niet het verwachte antwoord als er meer dan 1 nummer zoals 'EPA WELL 5 7' in het station is. Deze oplossing vult het getal met '0'-en, zodat de vergelijking alle getallen 8 cijfers zal beschouwen.

DECLARE  @Table1 table([station] varchar(26))

INSERT INTO @Table1
    ([station])
VALUES
    ('ANTIL WELL 2'),
    ('ANTIL WELL 1'),
    ('BASELINE & CALIFORNIA WELL'),
    ('EPA WELL 7'),
    ('EPA WELL 6'),
    ('EPA WELL 108'),
    ('EPA WELL 109'),
    ('EPA WELL 110'),
    ('EPA WELL 111'),
    ('EPA WELL 112'),
    ('EPA WELL 108S'),
    ('EPA WELL 111108')
;

SELECT station
FROM @table1
ORDER BY 
CASE WHEN station not like '%[0-9]%' THEN station ELSE
   STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0', 
   PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
END

*Het antwoord van GoatCD geeft niet de juiste volgorde in mijn testgegevens.



  1. MySQL Statement voorbereiden - maximale lengte 1000 tekens

  2. Fout:uw PHP-installatie lijkt de MySQL-extensie te missen die vereist is door WordPress

  3. Hoe het DATE-verschil in PostgreSQL te berekenen?

  4. Verbinding maken met een database met Sequel Pro