select c.*
from syscolumns c join sysobjects o on o.id=c.id and o.name = 'orders'
返回
Id
Customer
Product
03-28-2011
04-04-2011
04-11-2011
04-18-2011
这是对的。但我只想要匹配模式99-99-9999的列。所以我尝试了这个where cast(o.name as varchar) like '%-%-%'
没有返回任何结果。然后我尝试了这个:where cast(o.name as varchar) like 'P%'
(我希望得到“产品”)并且它也没有返回任何东西。为什么???我应该使用什么语法来获取“日期”列?
谢谢!
答案 0 :(得分:3)
对于你问题的每一部分......
您可以使用[0-9]指定范围。
所以对于99-99-9999
你有
LIKE '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'
对于日期,您也可以使用ISDATE或类似的内容来进一步限制
LIKE '[0-1][0-9]-[0-3][0-9]-2[0-9][0-9][0-9]'
这些条件永远不会都是真的,因为o.name
o.name = 'orders'
和
cast(o.name as varchar) like '%-%-%'
cast(o.name as varchar) like 'P%'
后者2应位于查询中的c.name
使用较新的sys.columns和sys.objects。或者INFORMATION_SCHEMA.COLUMNS,这可能是最好的
答案 1 :(得分:0)
您正在转换为varchar而不提供长度。我相信默认值为1可以解释问题。
在演员陈述中提供如下长度。
varchar(50)
编辑:否。施法和转换的默认值为30。