0
少なくとも10個以上の電子メールを連続して格納する電子メール列があります。ここでは、各メールを別々の行に配置するクエリを作成したいと考えています。例:Sqlの区切りフィールド内の改行またはキャリッジリターン
[email protected]
[email protected]
live.gmail.com
どのように記述しますか?
少なくとも10個以上の電子メールを連続して格納する電子メール列があります。ここでは、各メールを別々の行に配置するクエリを作成したいと考えています。例:Sqlの区切りフィールド内の改行またはキャリッジリターン
[email protected]
[email protected]
live.gmail.com
どのように記述しますか?
select replace(MyEmailField, '<CurrentDelimeter>', char(13)) as NewEmail
from MyTable
あなたはデータの行を意味する場合は、(REPLACEそれ以外の場合は2016を持っていない場合JohnHCは
Declare @YourTable table (ID int,Emails varchar(max))
Insert Into @YourTable values
(1,'[email protected],[email protected],live.gmail.com')
Select A.ID
,EMail=B.RetVal
From @YourTable A
Cross Apply [dbo].[udf-Str-Parse](A.EMails,',') B
を述べたように...どれパース/スプリット機能)が行います
返し
ID EMail
1 [email protected]
1 [email protected]
1 live.gmail.com
または単に
のSelect * from [dbo].[udf-Str-Parse]('[email protected],[email protected],live.gmail.com',',')
戻り
RetSeq RetVal
1 [email protected]
2 [email protected]
3 live.gmail.com
機能
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
);
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
を必要に応じて、これは非常に悪いデザインです。まず、電子メールを別のテーブルにして、各電子メールを個々の行に入れて修正する必要があります。 – HLGEM
私は@HLGEM、悪いデータベースデザインに同意します。しかし、これはあなたの状況に役立ちますhttp://stackoverflow.com/questions/7595826/sql-server-table-result-to-array-in-sql-server-2005 – tale852150