我有两个变量(即SQL表中的两列),一个是日期时间格式,例如, 2011-12-31 00:00:00,另一种是整数格式,例如201203,我希望得到这两个变量之间的差异,最有效的方法是什么?谢谢。得到SQL服务器中日期/时间和整数值之间的差异
0
A
回答
0
要解决您的问题,您需要将字符串或整数字段转换为日期时间字段,然后使用日期函数。
假设它是一个字符串字段:
create function dbo.DatePictureToDateTime(@datePicture varchar(20))
returns datetime
as
begin
return
case
-- YYYYMM case
when @datePicture like '[0-9][0-9][0-9][0-9][0-1][0-9]'
then convert(datetime, left(@datePicture, 4) + '-' + substring(@datePicture, 5, 2) + '-01', 121)
-- YYYYMMDD case
when @datePicture like '[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]'
then convert(datetime, left(@datePicture, 4) + '-' + substring(@datePicture, 5, 2) + '-' + substring(@datepicture, 7, 2), 121)
-- Add your own cases for different date strings you have
end
end
然后使用它是这样的:
select dbo.DatePictureToDateTime(datePicture), datePicture
from (
select '201103' as datepicture
union all select '20110330' as datepicture
)x
如果日期字段是一个整数
dbo.DatePictureToDateTime(cast(dateInteger as varchar(20))
要转换个月差异,请使用datediff
:
-- Datediff returns the number of period ends between the two datetimes
-- in this case it returns the number of month ends,
-- i.e. how many midnights on the last day of a month
datediff(month, dateField, dbo.DatePictureToDateTime(datePictureField))
注DATEDIFF的定义:
- 从一月31日至2月1日为1天的差异,也为1月的差异。
- 从2月1日至2月28日是27天的差额,但零个月。
如果这不是你想要的,你必须问另一个问题。日期计算很复杂。
0
的字符串转换日期与(可能需要设定转换格式)
CONVERT(DATE, @DateAsString)
转换的YearMonth诠释到YearMonthDay(在第一个月)一个日期,然后到日期与
CONVERT(DATE, CAST((@DateAsInt*100 + 1) AS VARCHAR(10)), 101)
因此,在一行:
DECLARE @DateAsInt INT = 201203
DECLARE @DateAsString VARCHAR(19) = '2011-12-31 00:00:00'
SELECT DATEDIFF(MONTH, CONVERT(DATE, @DateAsString), CONVERT(DATE, CAST((@DateAsInt*100 + 1) AS VARCHAR(10)), 101))
相关问题
- 1. 服务器和客户端之间的日期时间差异
- 2. 日期时间和日期格式之间的差异天数
- 3. SQL服务器中两个日期时间的差异
- 4. System.IO.IOException:客户端和服务器之间存在时间和/或日期差异
- 5. 日期时间之间的差异
- 6. 与客户端和服务器的时间/日期差异?
- 7. 日期之间的差异
- 8. 日期之间的差异
- 9. 参数和值之间的SQL差异
- 10. 计算报告与服务器日期之间的差异
- 11. 数据库中行之间的日期时间差异
- 12. 开始日期和系统时间之间的差异
- 13. 找到两个日期时间之间的微小差异
- 14. 小数格式的2个日期时间之间的差异
- 15. 得到了一个服务器端的时间和客户端时间之间的差异,并显示它
- 16. SQL服务器 - 服务器之间导出日期时间价值的变化值(时区问题?)
- 17. UTC时间戳到日期时间在Sql服务器
- 18. 日期/时间差异VBA
- 19. SQL查询获取真实日期和日期时间差异
- 20. Android中当前日期和输入日期之间的差异
- 21. SQL服务器日期时间
- 22. SQL服务器 - 上日期时间
- 23. 服务器日期时间和客户端日期时间
- 24. 两个日期之间的SQL查询日期差异
- 25. 整数和varchar之间的MySQL差异
- 26. 使用“Floor”获取日期和日期时间字段之间的差异
- 27. java中两个日期之间的时间差异
- 28. 计算MVC中两个日期时间之间的差异5
- 29. Spark SQL - 用于计算两个日期和时间之间差异的UDF
- 30. 客户端和服务器之间的时区差异?
你需要告诉我们这里有很多的要求。你的日期之一有一天 - 另一天没有。你想把你的约会当成没有一天或你的弦乐一样在同一天吗? – Hogan
字符串有不同的日子。我不在乎它是哪一天。我只需要不同的月份。谢谢。 –
您应该停止在字符串列中存储日期。如果您将日期时间值存储在日期时间数据类型中,则这变得非常简单。为了获得差异,你首先必须将它们转换为日期时间,然后使用DATEADD变得简单。 –