如何在SQL中将日期值转换为dd-MM-yyyy
的格式?我以varchar(10)
格式将日期存储到数据库中。现在想要比较从1-05-2015
到31-06-2015
的日期。
查询是:
select date
from dates
where date >='1-05-2015' and date <='10-06-2015'
我在Crystal报告中需要帮助。 如何删除2008年水晶报告中的空白行?
只返回(两者之间使用的结果相同)
我无法使用 Format Method ,因为2005年不支持。我尝试了 Convert 方法,但没有帮助。
答案 0 :(得分:0)
如果您将日期存储为字符串,则应将其用于将其转换为DATE
答案 1 :(得分:0)
无法记住CONVERT是否与现在完全一样,但您可以尝试
SET DATEFORMAT dmy -- Needed if date format on database server is different so the start and end date string values 01-05-2015 and 10-06-2015 can be converted automatically with the custom format
select date from dates where CONVERT(Date, date, 105) >='01-05-2015' and CONVERT(Date, date, 105) <='10-06-2015'
我建议不要将日期存储为varchar(10),而是将其存储为Date或DateTime。 另外我会使用yyyy-MM-dd格式,无论设置如何都可以解释,因此您不需要SET DATEFORMAT。 因此,如果您始终将日期存储为您可以执行的日期(以及其他功能):
select date from dates where date >= '2015-05-01' and date <= '2015-06-10'
答案 2 :(得分:0)
我同意其他评论,以适当的日期格式存储的日期是最好的方式,但有时更改数据库是不可行的。
这里有一些代码可以将日期从字符串格式转换为日期时间,假设月份和年份总是2和4个字符,日期是唯一的可变长度。
注意,我将where语句中的日期从'1-05-2015'更改为'2015-05-01'和'10 -06-2015'更改为'2015-06-10'。
select date
, cast(right(date, 4)+'-'+SUBSTRING(date, charindex('-', date)+1, 2)+'-'+left(date, charindex('-', date)-1) as datetime) as converted_date
from dates
where
cast(right(date, 4)+'-'+SUBSTRING(date, charindex('-', date)+1, 2)+'-'+left(date, charindex('-', date)-1) as datetime)
>= cast('2015-05-01' as datetime)
and cast(right(date, 4)+'-'+SUBSTRING(date, charindex('-', date)+1, 2)+'-'+left(date, charindex('-', date)-1) as datetime)
<= cast('2015-06-10' as datetime)
答案 3 :(得分:0)
我可以使用以下代码将varchar转换为sql 2014中的datetime
ALTER TABLE table_you_want ALTER COLUMN column_you_want DATETIME
我不确定2005是否支持它。 希望它有所帮助.. !! 1
答案 4 :(得分:0)
答案 5 :(得分:0)
您可以使用样式转换为日期类型:
select date
from dates
where convert(date, date, 103) between '20150501' and '20150610'
永远不要将日期保留为字符串,数字作为字符串等。使用适当的类型,这将使您远离这样的问题。