【问题标题】:Output of Empty Columns in SQL QuerySQL 查询中空列的输出
【发布时间】:2013-07-15 16:21:39
【问题描述】:

我有一个相当大的 SQL 查询,它将数字日期数据类型转换为日期时间值,并根据我的要求进一步指定搜索。但是,当我运行此查询时,我看到列名但列中没有数据,它只是按此顺序排列的列标题:数据集、日期、时间、MsgID、Parms、数据集 当顺序应该是:数据、时间、数据集、媒体(带有 Parms 子字符串的单独列)。此外,这仅显示我过去 2 天的数据,而不是整个数据库,这也是一个问题。

我需要一些帮助来按该顺序显示列以及所有列中的数据。如果有人可以对我现有的 SQL 查询提出任何建议或修改以获得所需的输出,将不胜感激。我知道这对于专业程序员来说是一种快速解决方法,但我仍在学习其中的技巧,需要一些帮助。

这是我的 SQL 查询:

    SELECT [Object] AS [Dataset],
    CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
    SUBSTRING([Date],10,2)+':'+
    SUBSTRING([Date],12,2)+':'+
    SUBSTRING([Date],14,2)+'.'+
    SUBSTRING([Date],15,3))) AS DATE) 'Date',
    LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
    SUBSTRING([Date],10,2)+':'+
    SUBSTRING([Date],12,2)+':'+
    SUBSTRING([Date],14,2)+'.'+
    SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
    MsgId,
    Parms,
    CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6)
    ELSE '' --Optional ELSE
    END  AS [Dataset]
    FROM ( SELECT  ItemId,
    CONVERT(VARCHAR(18),[Date]) [Date],
    [Object],
    MsgID,
    Parms
    FROM JnlDataSection
    WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
    substring(convert(varchar(50), [Date]), 5, 2) + '-' +
    substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
    CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to          remove     the time part
    WHERE SUBSTRING(Parms,35,6) = 'X05219' AS [Media]
    ORDER BY [DATE] DESC;

请注意:我使用的是 SQL Server Management Studio 2008。

【问题讨论】:

  • 尝试在没有Where 子句的情况下运行它,如果你得到结果,那就是条件......
  • @milenpavlov 绝对最后一个 where 子句?
  • 我会评论全部内容:WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' + substring(convert(varchar(50), [Date]), 5, 2) + '-' + substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) = CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to remove the time part WHERE SUBSTRING(Parms,35,6) = 'X05219' AS [Media] 看看这是否会有所作为..
  • @milenpavlov 我这样做了,它正在显示结果,但 Parms 不再修剪,msgid = 61 也不在任何地方。
  • @omarK:您可以在该表中创建一个视图并在视图中返回正常的datetime 值。这样就可以更轻松地处理您的数据。

标签: sql database output


【解决方案1】:

现在,您从 [DATE] 提取到日期和时间的内容似乎不正确。您将相同的字符串放入“日期”和“时间”

【讨论】:

  • 您可以在我的 sql 查询中显示正确的语法吗?
  • 我不知道您的数据来源,也不知道您将什么解析为日期和时间字符串。如果您查看您所称的“日期”,它使用的子字符串与您用于时间的子字符串相同。我的猜测是 DATE 字符串的不同部分,并且使用“/”而不是“:”作为分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
相关资源
最近更新 更多