标签: datetime

日期范围在 WHERE 中的 SQL Server 查询 - 执行计划使用聚集的 PK 实例而不是日期列索引

我在 SQL 服务器中有以下查询:

declare @timestamp_start date = getdate() - 1
declare @timestamp_end date = getdate()

SELECT  
    my_date = a.itemTimestamp
FROM
    my_table a with(nolock)
WHERE 
    (@timestamp_start is null OR a.itemTimestamp >= @timestamp_start)
    AND (@timestamp_end is null OR a.itemTimestamp < @timestamp_end)
Run Code Online (Sandbox Code Playgroud)

非常慢(< 2000 条记录为 90 秒),因为执行计划使用 PK 列的聚集索引作为“my_table”:

在此处输入图片说明

为什么会发生这种情况以及如何优化查询性能?

sql-server execution-plan datetime

2
推荐指数
1
解决办法
1639
查看次数

上次更改 InnoDB 表结构的日期

我想知道如何确定ALTER TABLE...对给定表进行的最后一次更改 ( ) 是什么时候。

有一个旧答案可用,但不幸的是它不适用于 InnoDB 表。

看看frm文件日期时间,这行得通吗?

-rw-r-----   1 mysql    mysql       18622 Oct 24 21:07 mysql/data/mydb/mytable.frm
-rw-r-----   1 mysql    mysql     2114688 Oct 28 06:26 mysql/data/mydb/mytable.ibd
Run Code Online (Sandbox Code Playgroud)

Oct 24 21:07似乎大致对应于上次执行结构更改的时间。
那是可靠的信息吗?

mysql innodb alter-table datetime

2
推荐指数
1
解决办法
1184
查看次数

如何以日期时间数据类型获取今天的最后日期?

选择 dateadd(s, -1, dateadd(month, datediff(month, 0, getdate())+1,0))

当我执行此查询时,它给出了“2012-01-30 23:59:59.000”。我不知道如何将其设为“2012-01-30 23:59:59.997”。如果有人知道,请说。

感谢您!!!

sql-server-2005 sql-server-2008 sql-server t-sql datetime

1
推荐指数
1
解决办法
1583
查看次数

将空字符串转换为空日期时间

考虑 Microsoft SQL Server 2012 中的以下代码:

INSERT INTO [dbo].Production
SELECT [field1]
      ,[field2]
      ,cast([datefield] as datetime)
FROM [RAW].Staging
Run Code Online (Sandbox Code Playgroud)

临时表加载了来自 CSV 文件的数据。因此,在某些情况下,我们最终会得到空字段,而不是 NULL 字段。因此,日期字段在插入生产表时会转换为 1900-01-01 日期。

我想知道在上面的插入代码中是否有什么我可以做的,以确保当来自临时表的字段为 NULL 或为空时,日期字段设置为 NULL。

null sql-server t-sql cast datetime

1
推荐指数
1
解决办法
2万
查看次数

我们如何获得两个日期时间之间的小时、分钟和秒差异?

table任务有列如下:

Task(TaskID, TaskName, CreatedDate)
Run Code Online (Sandbox Code Playgroud)

并希望根据日期时间差异执行代码块:

如果任务 CreatedDate 已过去 15 分钟 THEN

执行块#01

否则,如果任务 CreatedDate 还没有超过 15 分钟,那么

执行块#02

我测试了下面的查询,但它给出的结果为 61633440

SELECT DATEDIFF(MINUTE, CONVERT(VARCHAR(10), CreatedDate, 108), CURRENT_TIMESTAMP) AS MinuteDiff
Run Code Online (Sandbox Code Playgroud)

我们如何在 sql 中实现上述目标?

sql-server sql-server-2012 datetime date

1
推荐指数
1
解决办法
6326
查看次数

PostgreSQL 中的办公时间

如何在 PostgreSQL 行中存储办公时间,以便我可以计算办公时间。

例子:

  • 我们周一至周五的营业时间为 9:00 至 18:00。
  • 星期六我们的营业时间为 10:00 至 15:00
  • 从 12 月 24 日到 12 月 31 日我们的营业时间为 10:00 到 13:00(但周六和周日不营业)
  • 12 月 25/26 日等银行假期关闭。
  • 以上所有规则有效期至 2021 年 12 月 31 日。
  • 从 2022 年 1 月 1 日开始,我们的营业时间为周一至周五的 10:00 至 18:00。星期六和以前一样开放。

我想将这些数据按行存储,以便我们可以为其开发接口。

然后需要一种使用行/规则来计算具体开放时间的方法。

在这种情况下,不同的时区并不重要。

我使用 PostgreSQL 12.6 版。但如果需要,我可以升级到更新的版本。

postgresql datetime date-math

1
推荐指数
1
解决办法
50
查看次数

将日期字符串转换为 SQL DATETIME - 希望没有 udf

我正在使用一个 Excel 文件,该文件具有不同格式的日期,但是当我尝试将其转换或将其转换为 SQL DATETIME 时,其中一种格式给我带来了一些痛苦。例如:

Thu Oct 16 13:40:19 2014Tue Apr 1 12:20:40 2014等等。

基本上格式是ddd MM dd HH:mm:ss yyyy.

我想知道是否有某种日期样式可以让我在一行中进行转换。我可以为此编写一个函数,但我想知道是否有更优雅的解决方案。我谷歌搜索没有运气。

t-sql sql-server-2008-r2 sql-server-2012 datetime

0
推荐指数
1
解决办法
693
查看次数

按日期计数的条目给出了错误的结果

我通过以下查询得到了一些奇怪的结果:

SELECT count(id)
FROM `asins`
WHERE `StockUpdated` >= '2016-12-30'
and  `StockUpdated` <= '2016-12-31'
Run Code Online (Sandbox Code Playgroud)

结果是:24446

SELECT count(id)
FROM `asins`
WHERE `StockUpdated` >= '2016-12-30'
Run Code Online (Sandbox Code Playgroud)

结果是:33098

SELECT count(id)
FROM `asins`
WHERE `StockUpdated` >= '2016-12-30'
and `StockUpdated` <= '2017-1-1'
Run Code Online (Sandbox Code Playgroud)

结果是:33098

SELECT count(id)
FROM `asins`
WHERE `StockUpdated` >= '2017-1-1'
Run Code Online (Sandbox Code Playgroud)

结果是:0

我的问题是为什么下面的查询不完美?

SELECT count(id)
FROM `asins`
WHERE `StockUpdated` >= '2016-12-30'
and  `StockUpdated` <= '2016-12-31'
Run Code Online (Sandbox Code Playgroud)

mysql count datetime

0
推荐指数
1
解决办法
88
查看次数

MS SQL - 将字符串 mm/dd 转换为日期

我在 MS SQL 中将字符串转换为日期有点困难。希望你能指导我。

这是我的场景:

我的表中有一个名为 ExpDt 的列。它是产品的保质期。格式为 mm/dd。

现在我想知道什么产品会在 5 天前过期。所以我要做一个datediff。但问题是 ExpDt 列不是有效日期。如何将其转换为有效日期?

因此输出将类似于:2018-01-20,这是一个有效日期。不是字符串。

这是我尝试过的。

-- Outputs 2018-01-31
-- select  @expDate = cast(datepart(year, getdate()) as nvarchar(5)) 
-- + '-' + substring(ExpDt, 1, 2) 
-- + '-' + substring(ExpDt, 4, 5)

-- from BigEMerchandiser.dbo.tbl_Abis_D
Run Code Online (Sandbox Code Playgroud)

它返回一个字符串,但我无法使用 convert 函数将其转换为日期。我将附上表格的屏幕截图,以便您可以看到 ExpDt 列的数据。希望我清楚地解释了自己。任何帮助将非常感激。谢谢你。

结果集

sql-server datetime

0
推荐指数
1
解决办法
164
查看次数

给定一个带有 date_time 列的表,如何仅使用日期运行查询

我有一个带有表的数据库,该表有一列 datetime Date_Time。其格式例如:2021-09-01 13:15:16。我想设置一个独立于时间的查询,但只考虑日期。例如,给定这样的表:

Date_Time
2021-09-01 13:15:16
2021-09-01 10:25:12
2021-08-30 03:05:16
2021-08-29 13:15:16
...
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询,如:

SELECT Date_Time 
FROM dbo.Twitter 
WHERE Date_Time BETWEEN '2021-08-29' AND '2021-09-01' 
ORDER BY Date_Time DESC;
Run Code Online (Sandbox Code Playgroud)

这样的查询当然没有给我任何东西,因为在 BETWEEN 中没有指定小时。

所需的结果必须是您在上面看到的结果,因此所有来自 '2021-08-29 00:00:00' 和 '2021-09-01 23:59:59' 的行我试图将小时数强加给自己 00:00 :00 和 23:59:59 在 BETWEEN 命令中,但由于该时间没有记录,因此不返回任何内容。

无论何时,查询都应返回该日期的所有结果。

sql-server date-format datetime where

0
推荐指数
1
解决办法
39
查看次数

在 postgres 中获取当前毫秒

我正在我的应用程序中处理时间戳/日期时间。我正在使用 postgres 数据库。在 postgres 中获取当前毫秒(例如 1412706599000)的方法是什么?

postgresql timestamp datetime date time

-1
推荐指数
1
解决办法
4988
查看次数

如何提取昨天和今天之间的数据?

我有一个名为列createdatedatetime数据类型。我想提取今天和昨天之间的数据。

select * from table1(nolock) where createdate ='2018-06-01' --not getting any output
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

select * from table1(nolock) where createdate between '2018-06-01' and '2018-06-02'
Run Code Online (Sandbox Code Playgroud)

而不是硬编码日期,我需要之间dateadd(d,-1,getdate()) and getdate(),但getdate()提供当前时间戳。我怎样才能搜索一整天 like2018-06-02而不是2018-06-02 02:12:13.423

sql-server select datetime

-1
推荐指数
1
解决办法
5万
查看次数

无法更新或插入数据到日期时间字段

我试图通过我正在开发的一个 Web 应用程序插入数据,但无法插入数据,在解决问题时,我发现即使直接通过 Microsoft SQL Server Management Studio 也无法编辑日期时间字段。

我正在尝试更新 SQL Server 2014 中的日期时间字段,但我收到了这个奇怪的错误

尝试更新日期时间字段时出错

我试图使第一行与第二行相同,但出现上述错误:

我如何尝试编辑数据

我有完全权限用户,我还可以编辑除日期时间类型列之外的所有其他列!

在这方面的任何帮助将更受欢迎。

这是列定义:

在此处输入图片说明

sql-server insert ssms update datetime

-2
推荐指数
1
解决办法
548
查看次数