【问题标题】:Where can DATEFORMAT and CONVERT be used? (sql server)DATEFORMAT 和 CONVERT 可以在哪里使用? (SQL服务器)
【发布时间】:2009-06-04 00:46:05
【问题描述】:

我正在运行 SQL Server 2005 (express)。 我正在尝试在查询中使用 DATEFORMAT 和 CONVERT。 我遇到了问题,所以我首先想问一下这些功能是否可以在任何地方使用。

我已经知道它们可以在 SELECT 中使用。 但是它们也可以用在 WHERE 中吗?

例如:

SELECT * 
    FROM review AS R, section AS SC, class AS CL, inserted AS M, section AS SC2, class AS CL2   
    WHERE 
    R.sectionId=SC.sectionId AND SC.classId=CL.classId AND
    M.sectionId=SC2.sectionId AND SC2.classId=CL.classId AND
    CL.classYear=CL2.classYear AND CL.classQuarter=CL2.classQuarter AND
    M.meetingDay = DATEPART(weekday,R.reviewStart) AND
    (
        CONVERT(VARCHAR(8), R.reviewStart, 108) between CONVERT(VARCHAR(8), M.meetingStart, 108) and CONVERT(VARCHAR(8), M.meetingEnd, 108) OR
        CONVERT(VARCHAR(8), R.reviewEnd, 108) between CONVERT(VARCHAR(8), M.meetingStart, 108) and CONVERT(VARCHAR(8), M.meetingEnd, 108) OR
        CONVERT(VARCHAR(8), M.meetingStart, 108) between CONVERT(VARCHAR(8), R.reviewStart, 108) and CONVERT(VARCHAR(8), R.reviewEnd, 108) OR
        CONVERT(VARCHAR(8), M.meetingEnd, 108) between CONVERT(VARCHAR(8), R.reviewStart, 108) and CONVERT(VARCHAR(8), R.reviewEnd, 108)
    )

见 M.meetingDay = DATEPART 中的使用 ... 以及 BETWEEN 事物的所有部分。

这样合法吗?

谢谢

【问题讨论】:

    标签: sql sql-server-2005 datetime


    【解决方案1】:

    是的,这是合法的

    您没有说您遇到的问题是什么,所以我无法提供太多指导,但我倾向于看看您的 varchar 字符串的长度。日期时间字符串需要超过 8 个字符;您是否使用 varchar(8) 截断部分字符串。

    【讨论】:

    • 格式 108 的格式为 hh:mi:ss,即 8 个字符。
    • 是的,在这种情况下,我试图只获取日期时间的 hh:mm:ss 部分。我想我会发布我的完整 SQL,然后发布我的错误消息。我应该创建一个新问题吗?
    • 如果问题内容明显不同,那么是的,一个新问题是合适的。
    • “between”即使已转换为 varchar 也能正常工作吗?
    • 是的,我想知道两者之间的关系;我怀疑可能发生的事情是您正在获得时间值字符串的 ASCII 比较,而不是时间值比较。考虑使用 DATAPART 和/或转换为数值。
    【解决方案2】:

    也许有点跑题了,但您应该调查一下迁移到 SQL 2008 Express 并使用 2008 引入的新日期时间类型,因为有新的 time type that stores exactly the time of the day(不含日期部分)。

    【讨论】:

    • 我用的是远程服务器,所以在服务器上没有选择……不过没关系,是学校项目,快结束了。现在一切正常,谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2020-07-31
    • 2012-10-16
    相关资源
    最近更新 更多