怎么理解这句SQL语句
答案:3 悬赏:40 手机版
解决时间 2021-02-11 06:46
- 提问者网友:精神病院里
- 2021-02-11 01:37
dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,1,时间),120),dateadd(ss,1,时间))/120)*120,convert(varchar(10),时间,120))
最佳答案
- 五星知识达人网友:雾月
- 2021-02-11 01:44
分步的解释如下:
dateadd(mi, -- 最外层dateadd的第一个参数, 指定按分钟数添加
( datediff(mi, convert(varchar(10),dateadd(ss,1,时间),120) , dateadd(ss,1,时间))/120 ) * 120, -- 最外层dateadd的第二个参数, 要相加的分钟数值, 参考下面的说明
convert(varchar(10), 时间 ,120) -- 最外层dateadd的第三个参数, 将字段“时间”的值格式化成yyyy-MM-dd的字串
)
--最外层dateadd的第二个参数, 要相加的分钟数值的计算式的说明
( datediff(mi, -- datediff第一个参数, 指示按分钟计算时间差值
convert(varchar(10), dateadd(ss,1,时间),120) , -- datediff第二参数, 将时间字段值加1秒得到的结果格式化成yyyy-MM-dd字串
dateadd(ss,1,时间) -- datediff第三个参数, 时间字段值加1秒得到的结果
)/120 ) * 120 -- datediff的结果先除以120, 再乘以120, 就是将分钟数按2小时(120分钟)取整再换成分钟数
从执行的效果来看, 好像是想从字段"时间"获取一个比其小且最接近的偶数整点时间(分钟,秒都是0, 小时数为偶数, 0, 2, 4, ...). 不过, 在处理临界的时间值时, 59分59秒多时, 计算的结果反而是当日的0时0分0秒.
使用这么复杂的函数, 想得到什么样的结果呢.
dateadd(mi, -- 最外层dateadd的第一个参数, 指定按分钟数添加
( datediff(mi, convert(varchar(10),dateadd(ss,1,时间),120) , dateadd(ss,1,时间))/120 ) * 120, -- 最外层dateadd的第二个参数, 要相加的分钟数值, 参考下面的说明
convert(varchar(10), 时间 ,120) -- 最外层dateadd的第三个参数, 将字段“时间”的值格式化成yyyy-MM-dd的字串
)
--最外层dateadd的第二个参数, 要相加的分钟数值的计算式的说明
( datediff(mi, -- datediff第一个参数, 指示按分钟计算时间差值
convert(varchar(10), dateadd(ss,1,时间),120) , -- datediff第二参数, 将时间字段值加1秒得到的结果格式化成yyyy-MM-dd字串
dateadd(ss,1,时间) -- datediff第三个参数, 时间字段值加1秒得到的结果
)/120 ) * 120 -- datediff的结果先除以120, 再乘以120, 就是将分钟数按2小时(120分钟)取整再换成分钟数
从执行的效果来看, 好像是想从字段"时间"获取一个比其小且最接近的偶数整点时间(分钟,秒都是0, 小时数为偶数, 0, 2, 4, ...). 不过, 在处理临界的时间值时, 59分59秒多时, 计算的结果反而是当日的0时0分0秒.
使用这么复杂的函数, 想得到什么样的结果呢.
全部回答
- 1楼网友:佘樂
- 2021-02-11 03:17
这些是 sql-92 设置语句,使 sql server 2000/2005 遵从 sql-92 规则。 当 set quoted_identifier 为 on 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 set quoted_identifier 为 off 时,标识符不可加引号,且必须符合所有 transact-sql 标识符规则。 sql-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 false。当 set ansi_nulls 为 on 时,即使 column_name 中包含空值,使用 where column_name = null 的 select 语句仍返回零行。即使 column_name 中包含非空值,使用 where column_name <> null 的 select 语句仍会返回零行。 当 set ansi_nulls 为 off 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 sql-92 标准。使用 where column_name = null 的 select 语句返回 column_name 中包含空值的行。使用 where column_name <> null 的 select 语句返回列中包含非空值的行。此外,使用 where column_name <> xyz_value 的 select 语句返回所有不为 xyz_value 也不为 null 的行。
- 2楼网友:琴狂剑也妄
- 2021-02-11 02:00
就是用了几个日期的函数,你先从括号里面一层一层的往外拆就知道结果了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯