我的计算机/SQL Server 2014 使用比 UTC 时间晚 5 小时的东部时区。但是当我运行以下代码时,我得到了 4 小时的差异。
CREATE TABLE datetimeoffsetfunction(
servertime DATETIME2,
utc_servertime DATETIME2,
offset_datetime DATETIMEOFFSET,
switch_offset DATETIMEOFFSET,
to_datetime DATETIMEOFFSET
);
INSERT INTO datetimeoffsetfunction
VALUES ( SYSDATETIME(),
SYSUTCDATETIME(),
SYSDATETIMEOFFSET(),
SWITCHOFFSET( SYSDATETIMEOFFSET(), '+05:00'),
TODATETIMEOFFSET( SYSDATETIME(), '+05:00')
);
The result I got is
servertime: 2016-07-09 23:59:16.4770556
utc_servertime: 2016-07-10 03:59:16.4770556
offset_datetime: 2016-07-09 23:59:16.4770556 -04:00
switch_offset: 2016-07-10 08:59:16.4770556 +05:00
to_datetime: 2016-07-09 23:59:16.4770556 +05:00
Run Code Online (Sandbox Code Playgroud)
servertime 是我的系统时间,考虑到夏令时,我可以解释为什么 servertime 和 utc_servertime 之间只有四个小时的差异。但我确实希望offset_datetime为 2016-07-09 23:59:16.4770556 -05:00除非 SQL Serve 现在考虑了夏令时。
所以我的问题是现在是否自动考虑夏令时是 SQL Server,至少从 …
我想获得一天的 00:00:00。应该在不使用的情况下完成CONCAT。有哪些选择?
我们可以CURDATE() function在选择查询中使用,但需要像2014-05-05 00:00:00. 如果NOW()会给喜欢2014-05-05 12:05:37。
我想CURDATE()在查询中添加默认值 00:00:00 。
我想在 SSIS 数据流中使用来自 SQL Server 的表。表的列之一是date类型。当我使用 OLE DB 源组件将其导入 SSIS 时,SSIS 将此列的元数据更改为WSTR.
你知道如何解决它吗?我认为以前从未发生过。我知道我可以强制 SSIS 在高级编辑器中更改数据类型,但是 SSIS 不应该“知道”这是date类型列并将其转换为DT_DATE?
我SQLOLEDB.1用作提供者。它是 SQL Server 2012,列的数据类型只是date.
我试图在昨天(不是硬编码)的订单表上获取 IDS 的计数,其中表中的日期对应于下订单的时间。
我的桌子看起来像这样
orders (
order_id INT PRIMARY KEY
, user_id INT
, date_created DATE
, order_value FLOAT
, city_id INT
)
Run Code Online (Sandbox Code Playgroud)
我已使用此代码在表中获取今天的日期 -
Select *,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) as Today
From orders
Run Code Online (Sandbox Code Playgroud)
这很好用,但是当我尝试尝试下面的 where 子句时
Select *,DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) as Today
From orders
where Today -1 = date_created;
Run Code Online (Sandbox Code Playgroud)
我收到这个错误“无效的列名‘今天’”所以我的问题只是如何让这个表识别我作为新列添加的日期并允许我对其执行工作?
提前致谢
我们正在使用商业智能系统,需要加载日期列表,以便我们可以将它们标记为“上周”或“过去 12 个月”或某些动态值。
我想知道虚拟生成一个表的最简单方法是什么,该表仅在一列中列出日期,实际上是从“2014-01-01”到当前日期的每个日期(其他列我可以使用那里的公式)。实际上,甚至将未来的日期附加一年也可能很有用。
现在,是的,我可以从另一个具有数千个条目的随机事实表中获取不同的日期,但这似乎很草率,并且正在创建一种真正不应该存在的依赖关系。
我有一张桌子,我想将其作为如下所述的邀请排行榜。我想创建一个查询来计算给定月份中重复行的数量并以降序排列。
通读一些问题,这个查询似乎有效:
SELECT COUNT(invite_code) AS counted
FROM invite_table
GROUP BY invite_code
ORDER BY counted DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
但它不考虑月份。我正在寻找的是获得最常出现的user_code在指定月份的地方。此外,对表设计的任何批评都是受欢迎的,因为我故意设计它以便有具有重复值的重复行。我正在尝试跟踪在给定月份中使用最多邀请码的用户,我还有一些代码指示用户来自哪个频道(例如,可能在 FB 中看到广告),这是一个有效的表格设计吗?
表“public.invite_table”
专栏 | 类型 | 整理 | 可空 | 默认
-------------+--------------+-----------+- ---------+---------
用户代码 | 性格变化| | 不为空|
邀请码 | 性格变化| | |
月 | 字符变化(3) | | 不为空|
点 | 整数 | | 不为空|
索引:
"invite_table_pkey" PRIMARY KEY, btree (user_code)
外键约束:
“invite_table_user_code_fkey”外键(用户代码)参考用户表(用户代码)
我有一个date具有以下值格式的类型列:(YYYY-MM-DD例如。2018-08-03)。我想获得与日期等效的 unix 时间戳,但没有时区。
Fe 日期2018-08-03应该相等1533254400(从这里计算)。
我试过了,to_timestamp(my_date_column, 'YYYY-MM-DD')但它返回 error function to_timestamp(date, unknown) does not exist。我尝试::timestamp...在函数调用结束时添加不同的变体,但无济于事。
目前我在应用程序层进行时间戳转换,但我想将该工作专用于数据库。
在其中一个存储过程中,我需要捕获实时事件的持续时间。保证永远不会超过 24 小时,因此结果列的数据类型选择为TIME(3)(映射到TimeSpan应用程序端)。计算过程如下:
update tbEvent set tWait= @dtEvent - dEvent - tEvent [where idEvent = @idEvent]
Run Code Online (Sandbox Code Playgroud)
此处dEvent和tEvent先前设置为dtEvent(原始事件@dtEvent的时刻)的日期和时间部分,并且是后续关闭事件的时刻。因此,我从 DATETIME 变量中减去 DATE 和 TIME 列值,并将结果填充到 TIME 列中。
[合理吗?] 预期行为: SQL 将每个表达式项隐式转换为 DATETIME,执行减法,然后通过简单地删除 DATE 部分将结果隐式转换为 TIME。 这一直有效! 嗯, - 到目前为止..
一个更新脚本突然在 SQL 2016 (13.0.1742.0) 上产生了一个错误:
System.Data.SqlClient.SqlException (0x80131904):
The data types datetime and date are incompatible in the subtract operator.
Error Number:402,State:1,Class:16
Run Code Online (Sandbox Code Playgroud)
但是相同的脚本在 2008 R2 (10.50.2500.0) 和 2019 (15.0.2080.9) 上运行良好! …
我知道如何解决这个问题,但我不明白为什么当我从SSMS运行下面的查询时它会起作用的技术细节运行下面的查询时它可以工作,但当我将它添加为 SQL Server 代理中的作业时相同的查询会失败,这背后的技术细节是什么。
查询:
select LEFT(datediff(day,GETDATE(),'31/08/20'+'26')/365.25,2) AS test
Run Code Online (Sandbox Code Playgroud)
作业失败时我收到的错误:
从字符串转换日期和/或时间时转换失败。[SQLSTATE 22007](错误 241)。这一步失败了。
SQL 代理是否使用不同的引擎或不同的技术?
我有一个包含一些帐户的表,以及他们的订阅的开始和结束日期。但是,这些订阅有时会重叠,我需要每个连接订阅期的开始日期和结束日期。就像示例图像中一样。
我尝试将订阅期与日期参考表合并,并标记日期(如果有订阅)。然而,代码变得相当复杂。我想一定有一个更简单的解决方案。
IF OBJECT_ID('tempdb..#Subscriptions') IS NOT NULL DROP TABLE #Subscriptions
CREATE TABLE #Subscriptions (
account_id varchar(1)
,start_date date
,end_date date
)
INSERT INTO #Subscriptions (account_id, start_date, end_date) values
('A','2019-06-20','2019-06-29'),
('A','2019-06-25','2019-07-25'),
('A','2019-07-20','2019-08-26'),
('A','2019-12-25','2020-01-25'),
('A','2021-04-27','2021-07-27'),
('A','2021-06-25','2021-07-14'),
('A','2021-07-10','2021-08-14'),
('A','2021-09-10','2021-11-12'),
('B','2019-07-13','2020-07-14'),
('B','2019-06-25','2019-08-26')
Run Code Online (Sandbox Code Playgroud)