问候, 我需要检查值存储数据库的格式是否正确。它应该检查类似的东西:
x-x
x-xx
xx-xx
xxx-xxx
etc.
其中xxx应该是整数。因此,概念是检查值是否具有以下格式:整数 - 整数
答案 0 :(得分:4)
SQL没有最强大的模式匹配。但是这个查询应该找到最糟糕的格式:
select *
from YourTable
where col1 like '%[^0-9-]%'
or col1 like '%-%-%'
or col1 not like '%[0-9]-[0-9]%'
这就像:
col1 like '%[^0-9-]%'
可能只有数字和破折号col1 like '%-%-%'
不能有两个破折号col1 not like '%[0-9]-[0-9]%'
必须在短划线的左侧和右侧有一个数字答案 1 :(得分:0)
试试这个 -
select CASE WHEN (
charindex('-',columnName) > 0
AND
ISNUMERIC(left(columnName,(charindex('-',columnName)-1))) > 0
AND
ISNUMERIC(right(columnName,(charindex('-',columnName)))) > 0
) THEN 1 ELSE 0 END as properWord
from myTable
如果正确的其他字返回0,则返回1
编辑:假设你没有连续' - '之类的字符串' - ',后跟两边的数字。适用于所有其他情况。
答案 2 :(得分:0)
create table #t (
txt varchar(100)
)
go
insert into #t select '1-1'
insert into #t select '11-22'
insert into #t select '1-1-'
insert into #t select '1-A'
insert into #t select '1-A1'
insert into #t select '-'
insert into #t select '1-1-1'
insert into #t select '1 - 3'
go
select
txt
from
#t
where
-- digits and dashes only
txt not like '%[^0-9-]%' and
-- one dash only
len(replace(txt, '-', '')) = len(txt)-1 and
-- starts and ends with a digit
txt like '[0-9]%[0-9]'
应该这样做,假设您没有处理空格或其他任何其他要求,并且如果需要,可以将其设置为CHECK约束。