[ad_1]
I have table data like below Id | StringValue == | ============= 1 | 4,50 2 | 90,40 I will get input StringValue like 4. I need to fetch the data exact matched record. When i am using like operator, select query giving two rows but i need exact matched data record only. can anybody please help me on this? What I have tried: SELECT * FROM Table1 where StringValue like '%4%' but it returns two rows both ID 1 and 2. My expectation is I need to get ID = 1 row only
解決策 1
さて、文字列を分割して数値を保存するのではなく、文字列を保存するという間違いを犯したため、SQL で文字列を次のように分割する必要があります。 STRING_SPLIT[^]、次に、その返された配列で探している値を探します。
これに関する問題は、値の結果を検索できるように、クエリで STRING_SPLIT ON EVERY ROW IN THE TABLE を実行する必要があることです。 テーブルに多数のレコードがある場合、これにはかなりの時間がかかります。
このデータを表現する方法を再考し、SQL の長所を活用するテーブルとリレーションに分割することを強くお勧めします。
解決策 2
デイブが言ったことに追加するには…
LIKE 演算子は文字列でのみ機能します。そのため、間違いを修正して数字を数値列に格納したとしても (これは実際に行う必要があります)、SWL はそれらを文字列に変換して LIKE 比較を行います。
しかし、それでも、数値 4.5 と 4 を比較して「これらは同一である」という結果を与える組み込みの演算子はありません。
あなたの選択 (DB 設計が修正された後) は、以下を使用して数値を整数に変換することです。 SQL Server CAST() 関数[^] 小数部分を破棄するか、範囲を使用します。
...WHERE x BETWEEN 4.0 AND 4.99999
ただし、最初に DB を変更する必要があります。ストレージには常に適切なデータ型を使用してください。 数値フィールドの数値 (INT、FLOAT、DECIMAL)。 日付ベースの列の日付 (DATE、DATETIME、DATETIME2)。 また、それらと連携するようにプレゼンテーション ソフトウェアを変更する必要があります。つまり、変換された値をパラメーターとして渡して DB を INSERT または UPDATE する前に、入力を検証および変換する必要があります。
そうしないと、いくつかの重大な問題を抱えていることになります。無効なデータ、混合形式のデータ、SQL インジェクションが主な懸念事項です。
[ad_2]
コメント