我有一个要求,我必须配置/检查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. 如何使用SQL Server数据库中的值填充列表?
- 2. 会话变量值不存储到MS Sql Server数据库
- 3. MS SQL - 存储的数据类型
- 4. 如何在SQL Server数据库表列中存储图像
- 5. 数据类型来存储整数和SQL Server的浮点值
- 6. 如何使用SQL Server处理列中的混合数据类型值
- 7. 如何将散列存储在使用C#的SQL Server数据库中?
- 8. 在SQL Server 2005数据库中存储c#DateTimeOffset值
- 9. 将MS SQL Server凭据存储在MySQL数据库中
- 10. 如何在SQL Server中使用alter设置列的默认值?
- 11. 如何将位值从前端存储到sql server数据库?
- 12. 数据类型使用存储在SQL
- 13. 如何在C#中的SQL Server数据库中保存CheckBox值
- 14. 用于存储大型JSON的SQL Server数据库中的数据类型
- 15. 如何在SQL Server的图像类型列中存储字符串使用SqlParameter
- 16. SQL Server计算出的GEOMETRY数据类型的列值
- 17. (my)SQL数据库 - 存储不同类型的相同值
- 18. 如何逆转置不同的数据类型的SQL Server列
- 19. 如何在ms sql server数据库中保存float值(包括.00)?
- 20. 用于在SQL Server数据库中存储音频文件的数据类型?
- 21. 如何在MS SQL Server 2014中创建新的数据类型?
- 22. 无法使用存储过程将值NULL插入列(MS-SQL)
- 23. 如何在SQL Server的varcher数据类型列中输入nvarchar数据类型?
- 24. 如何在MS sql server中插入md5散列值?
- 25. 要存储的值作为XML格式在SQL Server中的列
- 26. 在Sql列中存储多个值
- 27. 如何使用SQL选择值的阵列 - SQL Server 2005中
- 28. SQL如何存储列十进制值?
- 29. 如何在SQL Server数据库中列出用户定义的类型?
- 30. 如何将表数据存储在SQL Server数据库中?
非常感谢你的帮助。 – Walker 2011-03-09 14:33:17