我有一個要求,我必須配置/檢查MS SQL Server數據庫表中的特定列是否只包含字符(數字不允許在城市等欄目中)。相似的,我必須檢查一列可以包含字母數字值而不是特殊字符(如@,#,$等)。這怎麼可以用SQL Server sql來完成。如何配置MS SQL Server數據庫列值使用SQL存儲在列中的值類型
回答
要查找包含數字的所有行,可以使用Like。 Column like ('%[0-9]%')
您可以擴展到包含其他不需要的字符。 Column like ('%[0-9,@,#,$]%')
對於想要指定有效的字符並查找非法行的情況,我沒有很好的解決方案。這是一個解決方案,首先分割列,以便每個字符都有一行。根據你的桌子的大小,這可能對你有用,或者它太慢了。
declare @T table (ID int, Name varchar(50))
insert into @T values
(1, 'Name'),
(2, 'Name1'),
(3, '@Name'),
(4, 'Nam3e')
;with CharSplit as
(
select
ID,
left(Name, 1) as Val,
stuff(Name, 1, 1, '') as Name
from @T
union all
select
ID,
left(Name, 1) as Val,
stuff(Name, 1, 1, '') as Rest
from CharSplit
where Len(Name) > 0
),
InvalidList as
(
select distinct ID
from CharSplit
where Val not between 'a' and 'z'
)
select
T.ID,
T.Name
from InvalidList as I
inner join @T as T
on I.ID = T.ID
結果
ID Name
----------- --------------------------------------------------
2 Name1
3 @Name
4 Nam3e
如果使用區分大小寫的排序規則,你可能需要包括and Val not between 'A' and 'Z'
以及(未測試)。
爲了提供例如基於什麼樣的Mikael說:
declare @Data table (id int not null primary key identity(1,1), blurb nvarchar(255) , number nvarchar(255))
insert into @Data([blurb] , [number]) values
('Not only Numeric' , '(011) 555-1234')
,('Pure Text' , 'Test')
,('Good Number' , '12345')
select * from @Data where number not like '%[^0-9]%' -- Valid Data
select * from @Data where number like '%[^0-9]%' -- Invalid Data
非常感謝你的幫助。 – Walker 2011-03-09 14:34:04
性格分裂by Mikael Eriksson的想法可以用數字表的幫助下實現方式不同:
WITH atable AS (
SELECT *
FROM (
VALUES
(1, 'Name'),
(2, 'Name1'),
(3, '@Name'),
(4, 'Nam3e')
) x (ID, Name)
),
atable_split AS (
SELECT
t.ID,
t.Name,
OneChar = SUBSTRING(t.Name, v.number, 1)
FROM atable t
INNER JOIN master..spt_values v
ON v.type = 'P' AND v.number BETWEEN 1 AND LEN(t.Name)
)
SELECT ID, Name
FROM atable_split
GROUP BY ID, Name
HAVING MAX(CASE WHEN OneChar BETWEEN 'a' AND 'z' THEN 0 ELSE 1 END) = 1
這種方法產生比Mikael所做的更好的執行計劃,它可能甚至不是最好的執行計劃。
+1使用數字表比分割字符串的遞歸cte要好。 – 2011-03-09 12:56:15
非常感謝你的幫助。 – Walker 2011-03-09 14:32:34
- 1. 會話變量值不存儲到MS Sql Server數據庫
- 2. 如何在SQL Server數據庫表列中存儲圖像
- 3. 數據類型來存儲整數和SQL Server的浮點值
- 4. 如何使用SQL Server處理列中的混合數據類型值
- 5. 如何將散列存儲在使用C#的SQL Server數據庫中?
- 6. 在SQL Server 2005數據庫中存儲c#DateTimeOffset值
- 7. 如何在SQL Server中使用alter設置列的默認值?
- 8. 如何將位值從前端存儲到sql server數據庫?
- 9. 數據類型使用存儲在SQL
- 10. 如何在C#中的SQL Server數據庫中保存CheckBox值
- 11. 用於在SQL Server中存儲日期值的貨幣數據類型?
- 12. 如何在SQL Server的圖像類型列中存儲字符串使用SqlParameter
- 13. (my)SQL數據庫 - 存儲不同類型的相同值
- 14. 如何逆轉置不同的數據類型的SQL Server列
- 15. 用於在SQL Server數據庫中存儲音頻文件的數據類型?
- 16. 如何在SQL Server的varcher數據類型列中輸入nvarchar數據類型?
- 17. 如何在MS sql server中插入md5散列值?
- 18. 在Sql列中存儲多個值
- 19. 如何使用SQL選擇值的陣列 - SQL Server 2005中
- 20. 如何在SQL Server數據庫中列出用戶定義的類型?
- 21. 將Unicode數據存儲在SQL Server 2008中XML數據類型
- 22. 如何將表數據存儲在SQL Server數據庫中?
- 23. 哪一個是SQL Server 2008中存儲整數值的最小數據類型?
- 24. 如何使用sql server數據庫中的數據保存datagridview列
- 25. 根據一列中的值更新SQL Server 2008數據庫表的列數
- 26. 如何使用Powershell列出所有SQL Server表,其列和列數據類型?
- 27. 修剪SQL Server數據庫中的值
- 28. 存儲鍵/值緩存的數據庫表數據類型
- 29. 從C中確定SQL Server數據庫列的默認值#
- 30. 如何從MS SQL數據表中檢索列默認值
非常感謝你的幫助。 – Walker 2011-03-09 14:33:17