-4

与えられた例で異なる値のフォームが必要です

サンプル文字列:

Column1
---------
6A
6B
6C
7A
7B
7C

出力

Column1   Column2
---------------------
6           A
6           B
6           C
7           A
7           B
7           C 

何か方法はありますか 助けてください

4

3 に答える 3

3

そのために使用できますPATINDEX

--DROP TABLE dbo.MyTbl;

CREATE TABLE dbo.MyTbl(column1 VARCHAR(200));
INSERT INTO dbo.MyTbl(column1)
VALUES
 ('123ab'),
 ('xxx'),
 ('13'),
 (''),
 ('4f');


SELECT LEFT(Column1,PATINDEX('%[^0-9]%',Column1+'x')-1), 
       SUBSTRING(Column1,PATINDEX('%[^0-9]%',Column1+'x'),LEN(Column1))
FROM dbo.MyTbl;

+'x'、数字の後に文字がない場合を確実に処理できるようにします。

于 2013-03-22T20:08:22.650 に答える
0

数字で始まると仮定して..

DECLARE @tab TABLE(Col VARCHAR(50))
INSERT INTO @tab 
VALUES('6A')
,('65BC'),('654CBA'),('7654ABCD')
,('76543BCDEF'),('765432CDEFGG')

SELECT *
FROM @tab

SELECT Col
,SUBSTRING(Col,1,(p0.num1-1)) AS Col1
,SUBSTRING(Col,p0.num1,LEN(Col)) AS Col2
FROM @tab
CROSS APPLY (
    SELECT 
    PATINDEX('%[^0-9]%',Col) AS num1)p0
于 2013-03-22T20:00:30.380 に答える
0

数値の最大長がある場合は、次のようにかなり直接的に行うことができます。

select (case when numlen > 0 then cast(left(col1, numlen) as int) else 0 end) as column1,
       substring(col1, numlen+1, 100) as column2
from (select col1,
             (case when isnumeric(left(col1, 10)) = 1 then 10
                   when isnumeric(left(col1, 9)) = 1 then 9
                   when isnumeric(left(col1, 8)) = 1 then 8
                   when isnumeric(left(col1, 7)) = 1 then 7
                   when isnumeric(left(col1, 6)) = 1 then 6
                   when isnumeric(left(col1, 5)) = 1 then 5
                   when isnumeric(left(col1, 4)) = 1 then 4
                   when isnumeric(left(col1, 3)) = 1 then 3
                   when isnumeric(left(col1, 2)) = 1 then 2
                   when isnumeric(left(col1, 1)) = 1 then 1
                   else 0
              end) as Numlen
      from t
    ) t
于 2013-03-22T19:57:33.923 に答える