我在这个 TSQL(类似运算符)中缺少什么?

发布于 2024-11-27 17:39:41 字数 449 浏览 0 评论 0原文

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%' (我期望得到“Product”),它也没有返回任何内容。为什么???我应该使用什么语法来获取“日期”列?

谢谢!

select c.* 
from syscolumns c join sysobjects o on o.id=c.id and o.name = 'orders'

returns

Id
Customer
Product
03-28-2011
04-04-2011
04-11-2011
04-18-2011

This is correct. But I want only the columns that match the pattern 99-99-9999. So I tried this where cast(o.name as varchar) like '%-%-%' which didn't return any results. Then I tried this: where cast(o.name as varchar) like 'P%' (I expected to get "Product") and it also did not return anything. Why??? What syntax should I use to get the columns that are "dates" ?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神妖 2024-12-04 17:39:41

对于问题的每个部分...

日期模式匹配

您可以使用 [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]'

列过滤器

这些条件永远不可能全部为真,因为它们全部< /em> 位于 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 这可能是最好的

For each part of your question...

Date pattern matching

You can use [0-9] to specify ranges.

So for 99-99-9999 you'd have

LIKE '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'

For dates, you can use ISDATE too or things like this to restrict further

LIKE '[0-1][0-9]-[0-3][0-9]-2[0-9][0-9][0-9]'

Column filters

These conditions can never all be true because they are all on o.name

o.name = 'orders'

and

cast(o.name as varchar) like '%-%-%'
cast(o.name as varchar) like 'P%'

The latter 2 should be on c.name in your query

Finally

Use the newer sys.columns and sys.objects. Or INFORMATION_SCHEMA.COLUMNS which is probably best here

那支青花 2024-12-04 17:39:41

您正在转换为 varchar 而不提供长度。我相信默认值为 1 这可以解释问题。

在强制转换语句中提供长度,如下所示。

varchar(50)

编辑:否。强制转换和转换的默认值为 30。

http://msdn。 microsoft.com/en-us/library/ms176089.aspx

You are casting to varchar without providing a length. I believe that the default is 1 which would explain the problem.

Provide a length in the cast statement as follows.

varchar(50)

Edit: No. The default for cast and convert is 30.

http://msdn.microsoft.com/en-us/library/ms176089.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文