カンマの前後の値を選択するためのSQLクエリ
employeeというテーブルがあり、3つのフィールドがあります。Id、Name、Departmentid DepartmentIdでは、3つのID 201,301,401で構成されます。
これから実行したい
Select * from employee where DepartmentId =301
回答 5 件
SELECT * FROM EMPLOYEE WHERE DEPARTMENTID LIKE '%301%'
それが機能する場合でも、DBがどのように設計されているのか、なぜコンマが必要なのかはよくわかりません
parsename()
を使用できます 関数:. . . where parsename(replace(DepartmentId, ',', '.'), 2) = 301;
しかし、
like
述語も便利です:. . . where DepartmentId LIKE '%301%';
カンマ区切りの列はアンチパターンです。部門を正規化します。
ただし、次の1つの方法があります。
select * from employee where '301' in (SELECT value FROM STRING_SPLIT(department, ','))
1301または3011のような部門がある場合、単純なLIKEは失敗する可能性があります
次のSQLコードを確認してください
select * from employees where ','+departmentid+',' like '%,301,%'
他のオプションは、departmentid列を各部門ID値リストに分割することです
SQL Server 2016より前のSQL Serverがある場合は、独自のカスタムSQL文字列分割関数が必要です。 その後、次のSQLクエリを使用できます
select e.* from employees as e cross apply dbo.split(departmentid,',') as s where s.val = '301'
SQL Server 2016またはSQL Server 2017で作業している場合、string_splitビルトインSQL関数は、CROSS APPLYクエリで次のように再び使用できます。
SELECT e.* FROM employees as e CROSS APPLY STRING_SPLIT(departmentid, ',') WHERE value = '301'
最後の1つの方法は、次のようにコンマ区切りリストをXMLデータに変更することにより、SQL XMLクエリを使用することです。
select Id, Name, sqlXML.value('.','varchar(5)') as DepId from ( SELECT Id, Name, convert(xml, '<root><t>' + REPLACE(Departmentid, ',', '</t><t>') + '</t></root>') as dlist FROM employees ) tbl CROSS APPLY dlist.nodes('/root/t') as XMLData(sqlXML) WHERE sqlXML.value('.','varchar(5)') = '301'
関連記事
- データベースで更新する前に、グリッドビューの要素の値を変更するにはどうすればよいですか?
- 文字の後にコンマを挿入するsedパターン
- レンダリングループの前にglUniform1f呼び出しを配置すると、均一な値が保存されません
- 2行ごとにSeleniumPythonにコンマを追加するにはどうすればよいですか?
- 別のクラスで変更した後、値をフラッター、送信、取得します
- 約束:同期コードの後、非同期コードの前に解決が実行されるのはなぜですか
- ドロップダウンセルの検証値を選択する方法
- レンダリング後に値をReact更新します
- アポストロフィとハイフンの前後のスペースを禁止する正規表現
- Sparkの列値に基づいてリテラルを選択します
これは、常に真ん中の数字で一致させたい場合に機能します。
301
あなたの例では。301
の場合 そのフィールドの任意の場所にあることができ、あなただけのLIKE
を使用することができます