2013-12-10 68 views
0
SELECT * FROM (
    SELECT ID, 
     CAST('EDIT' AS NVARCHAR(MAX)) AS 'test', 
     CAST([dbo].[SC_GetVersionedFieldValue](ID, '{8DBF084C-E575-4739-B37A-F732F72CFF69}') AS NVARCHAR(MAX)) AS 'City', 
     CAST([dbo].[SC_GetVersionedFieldValue](ID, '{32ED6082-1145-4331-9D29-F47E19090A0A}') AS NVARCHAR(MAX)) AS 'Sectors' 
    FROM [dbo].[Items] WHERE [TemplateID] = '{000C7660-E35B-4734-B1DA-A42A79A7B827}') 
    mytable 
WHERE [City] like 'l%' 
OR [Sectors] LIKE '%{20090D52-4C76-4C93-A249-F6E0883F4663}%' 
OR [Sectors] LIKE '%{FAE9FCB9-8D1C-439E-BA6C-00804C58361E}%' 
OR [Sectors] LIKE '%{844C2884-4E6A-4F38-9DE4-7CCF7DDF06C6}%' 

我需要檢索城市名稱以'某些字母表'開頭的行,並且扇區應該在(id1,id2,id3 ... n)中,而不是OR。一些ID位於兩個以分隔數據爲參照的ID之間(請參閱圖片)。有什麼建議?SQL Server:如何編寫一個SQL Select查詢來從列中搜索數據包含分隔數據?

enter image description here

+1

**不要在列中添加分隔數據!! ** –

+0

來自第三方CMS系統的數據源。他們的系統採用這種格式捕獲數據。 – user2943399

回答

0

你需要寫你的翻譯多值列成多行多語句表值函數。 (請參閱CREATE FUNCTION的文檔。)

一旦您擁有該功能,就可以通過CROSS APPLY調用它。 (而且,正如Joel Coehoorn在評論中指出的那樣,你不應該在SQL Server中存儲這樣的數據,而應該將「扇區」的GUID移動到一個外部表中,或者至少是一個XML字段。 )

0

我不明白你的where子句中需要,但試試這個

SELECT * FROM (
    SELECT ID, 
     CAST('EDIT' AS NVARCHAR(MAX)) AS 'test', 
     CAST([dbo].[SC_GetVersionedFieldValue](ID, '{8DBF084C-E575-4739-B37A-F732F72CFF69}') AS NVARCHAR(MAX)) AS 'City', 
     CAST([dbo].[SC_GetVersionedFieldValue](ID, '{32ED6082-1145-4331-9D29-F47E19090A0A}') AS NVARCHAR(MAX)) AS 'Sectors' 
    FROM [dbo].[Items] WHERE [TemplateID] = '{000C7660-E35B-4734-B1DA-A42A79A7B827}') 
    mytable 
WHERE [City] like '[A-Z]%' --'[a-z]%' 
and (
     [Sectors] LIKE '%{20090D52-4C76-4C93-A249-F6E0883F4663}%' 
     OR [Sectors] LIKE '%{FAE9FCB9-8D1C-439E-BA6C-00804C58361E}%' 
     OR [Sectors] LIKE '%{844C2884-4E6A-4F38-9DE4-7CCF7DDF06C6}%' 
     ) 

HOPE得到了一些主意。

相關問題