我有表中,在一個名爲測試的表中,其中有4個fields.one字段命名爲列表,我有1,2,3,4,5,6多個值用逗號分隔,我需要檢查是否在該表中,並在該特定領域的ID說4是否存在或通過SQL查詢。SQL查詢複雜
SQL查詢複雜
回答
如果你需要找到4只4(即不是14或24或40等),你應該使用
SELECT * FROM foo WHERE col LIKE '%, 4,%'
或
SELECT * FROM foo WHERE col LIKE '%,4,%'
如果有之間沒有空格逗號和數字
,將不適用於「4,5,6」或只是「4」 – Thilo
這將是行不通的這是真實的,但在這種情況下,我會編寫將字符串發送到數據庫的代碼,以便在開始和結束時包含逗號 - 或者在開始時使用空格,在結尾使用逗號並從查詢中移除第一個逗號 - 以便查詢將始終有效。 – AndrewDFrazier
你的數據庫設計是錯誤的,這就是爲什麼你有問題查詢數據。你應該把這些值放在一個單獨的表中,這樣教學價值就在它自己的領域。然後,它會很容易找到的記錄:
select t.testId
from test t
inner join listing l on l.testId = t.testId
where l.id = 4
現在你必須使用一些醜陋的字符串比較,找到記錄:
select testId
from test
where ','+listing+',' like '%,4,%'
常見的方法是將列表解析到一個表變量或表值函數,然後根據表進行連接,或使用EXISTS子查詢。
有很多例子就如何做到這一點:
http://www.bing.com/search?setmkt=en-US&q=SQL+parse+list+into+table
這是假設SQL Server,不確定其他RDBMS的。 – Brannon
您可以嘗試
SELECT *
FROM YourTable
WHERE REPLACE(Col, ' ', '') LIKE '4,%' --Starts with
OR REPLACE(Col, ' ', '') LIKE '%,4' --Ends with
OR REPLACE(Col, ' ', '') LIKE '%,4,%' --Contains
OR REPLACE(Col, ' ', '') = '4' --Equals
正如感興趣的事,看看這個
DECLARE @delimiter NVARCHAR(5),
@Val INT
SELECT @Val = 40
SELECT @delimiter = ','
DECLARE @YourTable TABLE(
ID INT,
Vals VARCHAR(50)
)
INSERT INTO @YourTable (ID,Vals) SELECT 1, '1,2,3,4,5,6,7,8'
DECLARE @TempTable TABLE(
ID INT,
Vals XML
)
INSERT INTO @TempTable
SELECT ID,
CAST('<d>' + REPLACE(Vals, @delimiter, '</d><d>') + '</d>' AS XML)
FROM @YourTable
SELECT *
FROM @TempTable tt
WHERE EXISTS(
SELECT T.split.value('.', 'nvarchar(max)') AS data
FROM tt.Vals.nodes('/d') T(split)
WHERE T.split.value('.', 'nvarchar(max)') = @Val
)
你可以在where子句和select子句中使用instring函數:
甲骨文:如果你想有一個單一值
select substr(column, instr(column, '1', 1), 1)
where instr(column, '1', 1) > 0
作品。可替換地可以使用的情況下或解碼語句的組合,以對於每個可能的值來創建單個列:
select
decode(instr(column, '1', 1), 0, substr(column, instr(column, '1', 1), 1), null) c1,
decode(instr(column, '2', 1), 0, substr(column, instr(column, '2', 1), 1), null) c2,
decode(instr(column, '3', 1), 0, substr(column, instr(column, '3', 1), 1), null) c3
這種方法對於這樣的歸一化差的數據集的優點是可以將此保存爲視圖和然後運行SQL,所以如果您保存上述內容,您可以使用:
select c1, c2 from view where c1 is not null or c2 is not null
注意:在其他的dbms中,你可能必須使用不同的語法,可能是這種情況,而不是解碼語句
- 1. SQL複雜查詢
- 2. SQL複雜查詢
- 3. Postgres複雜的SQL查詢
- 4. SQL複雜的查詢
- 5. 複雜的組SQL查詢
- 6. ShoppingCart的複雜SQL查詢
- 7. 複雜的SQL查詢
- 8. 複雜的SQL查詢
- 9. 複雜SQL查詢加入
- 10. 複雜的SQL查詢
- 11. 複雜的SQL查詢
- 12. 複雜DELETE SQL查詢
- 13. 複雜的SQL查詢
- 14. 複雜的SQL查詢(DELETE)?
- 15. laravel複雜sql查詢
- 16. 複雜的SQL查詢
- 17. 複雜的SQL查詢
- 18. 複雜的SQL查詢
- 19. sql中的複雜查詢
- 20. 複雜SQL查詢幫助
- 21. Postgres複雜的SQL查詢
- 22. 複雜的SQL SELECT查詢
- 23. 複雜的SQL查詢
- 24. 複雜的SQL查詢
- 25. PHP複雜的SQL查詢
- 26. 複雜SQL連接查詢
- 27. SQL - JOIN複雜查詢
- 28. 超複雜的SQL查詢
- 29. SQL平均複雜查詢
- 30. 複雜的SQL查詢
這是什麼味道的SQL? –
Django有一個名爲CommaSeparatedIntegerField的字段類型,我認爲它以文本形式存儲在數據庫中。我很難找到與這個東西的數據庫交互如何工作。 –