0

現在、複数のデータ列を表示する SQL クエリがあります。それらの列の 1 つで、本当に必要なものだけを表示するようにデータを減らしたいと思います。問題は、必要なデータが文字列の途中にあることです。必要な値の前にあるものと、その後にあるものが固定定数であることを知っています。文字列の残りの部分は変更される場合があります。SQL クエリでそのデータのみを表示する方法はありますか?

以下は、文字列内のデータの例です。LR と SCCM の間のデータだけを見たいのですが。

A   %VR1  P  P%V 104.922043 %      Pt 4.902552 psig       PLR2  P  LR **0.350922** sccm      PL 0.001313 dpsig   

R   %VR1  P  P%V 105.017807 %      Pt 4.934245 psig       PLR2  F  LR **5.366095** sccm      PL 0.014557 dpsig     

A   %VR1  P  P%V 100.644852 %      Pt 5.112900 psig       PLR2  P  LR **-0.029057** sccm     PL 0.000377 dpsig     

A   %VR1  P  P%V 101.631256 %      Pt 5.107606 psig       PLR2  P  LR **2.515130** sccm      PL 0.006896 dpsig       
4

3 に答える 3

1

SQLエンジンにはSUBSTR()またはSUBSTRING()関数があり、最初の2文字と最後の4文字を常にスキップする必要がある場合に必要なことを実行します。

于 2012-10-04T15:52:52.503 に答える
1

SQLServerを使用している場合

declare @String varchar(500)

set @String = 'A %VR1 P P%V 101.631256 % Pt 5.107606 psig PLR2 P LR 2.515130 sccm PL 0.006896 dpsig '

select SUBSTRING(@String, charindex('PLR2 P LR ', @String) + 10, charindex(' sccm PL', @String) - charindex('PLR2 P LR ', @String) - 10)

LRとsccmが一意であると確信している場合は、次を使用できます。

declare @String varchar(500)

set @String = 'A %VR1 P P%V 101.631256 % Pt 5.107606 psig PLR2 P LR 2.515130 sccm PL 0.006896 dpsig '

select SUBSTRING(@String, charindex('LR ', @String) + 3, charindex(' sccm', @String) - charindex('LR ', @String) - 3)
于 2012-10-04T15:58:52.447 に答える
1

MySQLバージョン:

SET @var = 'A %VR1 P P%V 104.922043 % Pt 4.902552 psig PLR2 P LR 0.350922 sccm PL 0.001313 dpsig';

SELECT SUBSTRING(@var, LOCATE('LR ', @var) + 3, LOCATE('sccm', @var) - LOCATE('LR ', @var) - 3)

結果

0.350922

SQL Serverのバージョン:

DECLARE @var varchar(200)
SET @var = 'A %VR1 P P%V 104.922043 % Pt 4.902552 psig PLR2 P LR 0.350922 sccm PL 0.001313 dpsig'

SELECT SUBSTRING(@var, CHARINDEX('LR ', @var) + 3, CHARINDEX('sccm', @var) - CHARINDEX('LR ', @var) - 3)

結果

0.350922

列名:

SELECT SUBSTRING(col1, CHARINDEX('LR ', col1) + 3, CHARINDEX('sccm', col1) - CHARINDEX('LR ', col1) - 3)
于 2012-10-04T15:59:03.883 に答える