0

データベースに「Notes」というフィールドがあります。コンマ区切りの値のリストが含まれています。

「メモ」フィールドの最初の値のみを返す SELECT クエリを実行したいと考えています。

このクエリは、データベースから追​​加のフィールドも返します。

例えば

SELECT Name, Phone, Notes (only the first value)
FROM Table1 

これは可能ですか、どうすればできますか?

4

4 に答える 4

2
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
于 2012-12-06T19:14:04.997 に答える
2

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 つの属性に複数の値を格納しないようにする必要があります。

于 2012-12-06T19:07:21.847 に答える