我在 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”:
为什么会发生这种情况以及如何优化查询性能?
我想知道如何确定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似乎大致对应于上次执行结构更改的时间。
那是可靠的信息吗?
选择 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”。如果有人知道,请说。
感谢您!!!
考虑 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。
该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 中实现上述目标?
如何在 PostgreSQL 行中存储办公时间,以便我可以计算办公时间。
例子:
我想将这些数据按行存储,以便我们可以为其开发接口。
然后需要一种使用行/规则来计算具体开放时间的方法。
在这种情况下,不同的时区并不重要。
我使用 PostgreSQL 12.6 版。但如果需要,我可以升级到更新的版本。
我正在使用一个 Excel 文件,该文件具有不同格式的日期,但是当我尝试将其转换或将其转换为 SQL DATETIME 时,其中一种格式给我带来了一些痛苦。例如:
Thu Oct 16 13:40:19 2014,Tue Apr 1 12:20:40 2014等等。
基本上格式是ddd MM dd HH:mm:ss yyyy.
我想知道是否有某种日期样式可以让我在一行中进行转换。我可以为此编写一个函数,但我想知道是否有更优雅的解决方案。我谷歌搜索没有运气。
我通过以下查询得到了一些奇怪的结果:
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) 我在 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 列的数据。希望我清楚地解释了自己。任何帮助将非常感激。谢谢你。
我有一个带有表的数据库,该表有一列 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 命令中,但由于该时间没有记录,因此不返回任何内容。
无论何时,查询都应返回该日期的所有结果。
我正在我的应用程序中处理时间戳/日期时间。我正在使用 postgres 数据库。在 postgres 中获取当前毫秒(例如 1412706599000)的方法是什么?
我有一个名为列createdate的datetime数据类型。我想提取今天和昨天之间的数据。
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?
我试图通过我正在开发的一个 Web 应用程序插入数据,但无法插入数据,在解决问题时,我发现即使直接通过 Microsoft SQL Server Management Studio 也无法编辑日期时间字段。
我正在尝试更新 SQL Server 2014 中的日期时间字段,但我收到了这个奇怪的错误
我试图使第一行与第二行相同,但出现上述错误:
我有完全权限用户,我还可以编辑除日期时间类型列之外的所有其他列!
在这方面的任何帮助将更受欢迎。
这是列定义:
datetime ×13
sql-server ×8
t-sql ×3
date ×2
mysql ×2
postgresql ×2
alter-table ×1
cast ×1
count ×1
date-format ×1
date-math ×1
innodb ×1
insert ×1
null ×1
select ×1
ssms ×1
time ×1
timestamp ×1
update ×1
where ×1