与えられた例で異なる値のフォームが必要です
サンプル文字列:
Column1
---------
6A
6B
6C
7A
7B
7C
出力
Column1 Column2
---------------------
6 A
6 B
6 C
7 A
7 B
7 C
何か方法はありますか 助けてください
与えられた例で異なる値のフォームが必要です
サンプル文字列:
Column1
---------
6A
6B
6C
7A
7B
7C
出力
Column1 Column2
---------------------
6 A
6 B
6 C
7 A
7 B
7 C
何か方法はありますか 助けてください
そのために使用できます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'
、数字の後に文字がない場合を確実に処理できるようにします。
数字で始まると仮定して..
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
数値の最大長がある場合は、次のようにかなり直接的に行うことができます。
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