2017-11-08 10 views
0

SQL Serverテーブルを25列作成しました。私の列の1つは実際にJSONテキストで、nvarchar(max)として格納されています。SQL Server JSON_VALUE構文

このJSON列を照会して、さまざまな属性を解析する必要があります。 JSON_VALUEを私の列に適用しようとしましたが、何か間違っています。クエリは実行されますが、すべての値に対してNULLが返されます。

[ { "lineName":"GHjr", "pipeDiameter":"12", "pipeLength":"52000", "pressure":"15", "volume":"107" }, { "lineName":"Ks3R", "pipeDiameter":"9", "pipeLength":"40000", "pressure":"15", "volume":"80" } ]

私が使用しているSQLは次のとおりです:しかし、私の2 "解析された" 列はすべてNULLを返している

select 
DOC_ID, LINE_SPECS, 
JSON_VALUE(LINE_SPECS, '$.lineName')  as line_name, 
JSON_VALUE(LINE_SPECS, '$.pipe_Diameter') as diameter 
from dbo.MY_TEST_DOCS 
where ISJSON(LINE_SPECS) > 0 
    and len(LINE_SPECS) > 3 

JSON自体は次のようになります。この列から5つの属性を解析するにはどうすればよいですか?

+0

何らかのエラーが出てくるかどうかを確認するために、 'strict'モードで' JSON_VALUE'を置きます。デフォルトのモードは 'lax'で、エラーを生成しません。単に' NULL'を返します。 https://docs.microsoft.com/en-us/sql/relational-databases/json/json-path-expressions-sql-serverまた、 '$ .pipe_Diameter'は' $ .pipeDiameter'だと思います –

+1

角括弧を削除し、JSONの大文字と小文字を区別する名前に一致するように選択すると、値が返されます – dfundako

+0

実際には角括弧は配列の場合は大丈夫かもしれません。 –

答えて

0
Without the [] ISJSON is returning false 
With [] ISJSON retuns true 
Without the [] JSON_VALUE returns NULLs 
With [] JSON_VALUE returns values 

dbfddle.ukは、使用可能なSQLサーバ2016を有する....

create table test (LINE_SPECS nvarchar(max)); 

insert into test values (N' 
{ 
    "lineName":"GHjr", 
    "pipeDiameter":"12", 
    "pipeLength":"52000", 
    "pressure":"15", 
    "volume":"107" 
}, 
{ 
    "lineName":"Ks3R", 
    "pipeDiameter":"9", 
    "pipeLength":"40000", 
    "pressure":"15", 
    "volume":"80" 
} 
'); 

select * 
from test 
where ISJSON(LINE_SPECS) > 0 
; 

GO 
 
| LINE_SPECS | 
| :--------- | 
select 
     JSON_VALUE(LINE_SPECS, '$.lineName')  as line_name 
    , JSON_VALUE(LINE_SPECS, '$.pipeDiameter') as diameter 
from test 
; 
GO 
 
line_name | diameter 
:-------- | :------- 
GHjr  | 12  

dbfiddle here

+0

(その他)、あなたの答えは本当に助けになりました! JSON私は括弧を使って苦労していました。私は2番目の列を作成しました。これらの括弧はなく、JSON_VALUEは期待どおりに動作しました。 ご協力いただきありがとうございます。 – CarCrazyBen

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –