【问题标题】:Enums in T-SQL, is it possible?T-SQL中的枚举,有可能吗?
【发布时间】:2015-07-20 07:04:00
【问题描述】:

我们都知道系统函数DATEADD函数(例如)。这个函数有 3 个参数,第一个参数对我来说很奇怪。为了找出第一个参数的参数类型(在对象资源管理器窗口中显示varchar),我在 Google 上看了很多,但什么也没找到!

我认为是这个函数中使用的一种Enum,因为用法和Enum用法很相似:

Print DATEADD(DAY,1,GETDATE()) -- What's that DAY?

如果回答以下问题之一,则可以回答我的问题:

  1. 如何查看系统功能定义?
  2. 上述语句中的DAY 是什么,我如何编写像DATEADD 这样的函数来接受这样的参数?
  3. 如果是枚举,如何在 TSQL 中定义枚举?

【问题讨论】:

  • SQL 是一种奇怪的语言。我相信(虽然不能证明)day/week/etc 是上下文相关的关键字。 T-SQL 的内置函数享有 UDF 不具备的某些特权,包括您所看到的语法上的怪异。
  • 我是sql中的同义词。
  • 正如戴所说,你不能做这些事情。 T-SQL 实现者的规则与in T-SQL的编写规则不同。
  • 关于 t-sql 枚举 link

标签: sql sql-server tsql


【解决方案1】:

Day 是一个类型,它的值可以是:

yy, yyyy: year
qq, q: quarter
mm, m: month
dy, y: day of year
dd, d: day
wk, ww: week
dw, w: weekday
hh: hour
mi, n: minute
ss or s: second
ms: millisecond
mcs: microsecond
ns: nanosecond

【讨论】:

  • 我对这个答案投了反对票,因为DATEADD 的间隔参数没有“类型”——它是一组直接融入 T-SQL 语言的关键字。从 SQL Server 2019 开始,T-SQL 仍然不支持任何类型的用户定义枚举或命名常量。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多