が、私はこのような単一の列に格納されたアドレスのデータを持っている:SQLクエリ
123 Fake St #25
を私は、このデータにこのような3つの列を分離したいと思います:
Number Street Apt
-----------------------
123 Fake St #25
トリミング機能と検索機能を組み合わせて使うことができますが、わかりません。私は助けに感謝します。
が、私はこのような単一の列に格納されたアドレスのデータを持っている:SQLクエリ
123 Fake St #25
を私は、このデータにこのような3つの列を分離したいと思います:
Number Street Apt
-----------------------
123 Fake St #25
トリミング機能と検索機能を組み合わせて使うことができますが、わかりません。私は助けに感謝します。
唯一のヒントは、開始から最初の空白、最後から最初の空白です。しかし、 - 確かに! - それにもかかわらずで開始するには、何かこのパターンを気力ないアドレス...
があるでしょう:アドレスはあなたの例のように同様のパターンを持っているだろうと仮定すると
DECLARE @addr VARCHAR(100)='123 Fake St #25';
WITH Blanks AS
(
SELECT @addr AS Addr
,CHARINDEX(' ',@addr) AS FirstBlank
,CHARINDEX(' ',REVERSE(@addr)) AS LastBlankFromBack
)
SELECT LTRIM(RTRIM(LEFT(Addr,FirstBlank-1))) AS Number
,LTRIM(RTRIM(SUBSTRING(Addr,FirstBlank+1,LEN(Addr)-FirstBlank-LastBlankFromBack+1))) AS Street
,LTRIM(RTRIM(RIGHT(Addr,LastBlankFromBack-1))) AS Apt
FROM Blanks
、あなたは次のことを試してください。
...すでに区切り文字が知られていない場合は、正確な解を得ることはできません述べたように、
CREATE FUNCTION [dbo].[SplitGet] (
@test AS VARCHAR(255)
,@field AS VARCHAR(1)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @ReturnValue VARCHAR(255) = '';
DECLARE @Alpha VARCHAR(255) = '';
DECLARE @Beta VARCHAR(255) = '';
DECLARE @Gamma VARCHAR(255) = '';
DECLARE @ind INT = 1;
WHILE (@ind < LEN(@test))
BEGIN
IF (ISNUMERIC(substring(@test, @ind, 1)) = 1)
BEGIN
SET @Alpha = @Alpha + cast(substring(@test, @ind, 1) AS NVARCHAR(1));
SET @ind = @ind + 1;
END
ELSE
BEGIN
BREAK;
END
END
SET @Beta = Substring(Substring(@test, @ind, len(@test)), 0, charindex('#', Substring(@test, @ind, len(@test)), 0))
SET @Gamma = RTRIM(substring(@test, charindex('#', @test, 0), len(@test)));
IF (@field = 'n') --Numnber
BEGIN
SET @ReturnValue = @Alpha;
END
ELSE IF (@field = 'a') --Address
BEGIN
SET @ReturnValue = @Beta;
END
ELSE
BEGIN --Apartment
SET @ReturnValue = @gamma;
END
RETURN RTRIM(@ReturnValue)
END
は注意が必要です
DECLARE @test varchar(255) = '123 Fake st #25'
SELECT dbo.[SplitGet](@test,'n'),dbo.[SplitGet](@test,'a'),dbo.[SplitGet](@test,'')
アドレスのようにそれを使用してのようなスカラー値を返すように関数を作成します。 NumberとAptを分割する価値は何ですか? –