データベースに「Notes」というフィールドがあります。コンマ区切りの値のリストが含まれています。
「メモ」フィールドの最初の値のみを返す SELECT クエリを実行したいと考えています。
このクエリは、データベースから追加のフィールドも返します。
例えば
SELECT Name, Phone, Notes (only the first value)
FROM Table1
これは可能ですか、どうすればできますか?
データベースに「Notes」というフィールドがあります。コンマ区切りの値のリストが含まれています。
「メモ」フィールドの最初の値のみを返す SELECT クエリを実行したいと考えています。
このクエリは、データベースから追加のフィールドも返します。
例えば
SELECT Name, Phone, Notes (only the first value)
FROM Table1
これは可能ですか、どうすればできますか?
SELECT Name, Phone, Left(Notes, CharIndex(',', Notes + ',')) FirstNote
FROM Table1
Notes + ','
正しく機能するには、CharIndexのビットが必要です。この例を参照してください (njk の回答を含めました)。
with Table1(Name, Phone, Notes) as (
select 'abc', '123', 'Some,notes,here' union all
select 'abd', '124', 'Single-note' union all
select 'abe', '125', '' union all
select 'syz', '126', null
)
---
SELECT Name, Phone, Left(Notes, CharIndex(',', Notes + ',')-1) FirstNote
,SUBSTRING(Notes, 0, CHARINDEX(',', Notes)) AS njk
FROM Table1
結果
Name Phone FirstNote njk
---- ----- --------------- ---------------
abc 123 Some Some
abd 124 Single-note
abe 125
syz 126 NULL NULL
CHARINDEX
で使用できますSUBSTRING
:
SELECT Name, Phone, SUBSTRING(Notes, 1, CHARINDEX(',', Notes)) AS first_value
FROM Table1
デモ
DECLARE @csv varchar(50)
SET @csv = 'comma after this, and another,'
SELECT SUBSTRING(@csv, 1, CHARINDEX(',', @csv)) AS first_value
結果
| | 最初の値 | -------------------- | | この後のコンマ |
コメントで述べたように、構造を正規化し、1 つの属性に複数の値を格納しないようにする必要があります。