SQL:CASE问题,转换日期

时间:2016-07-29 09:04:02

标签: sql sql-server tsql case

下面是我的SQL查询的一部分,只是因为它很长。

问题是当我将CASE添加到我的select语句时,它会给我一个错误。 NSO Review列包含日期。但是,并非所有行都有日期可用,然后查询将' 1900-01-01'代替。我想用NO替换它,如果有任何其他值,则输入YES。你能帮忙吗

SELECT 'NSO Review' = ISNULL(tblTaskEventsHistory.TimeIn,''),
        CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102))
        WHEN '1900' THEN  'NO'
        ELSE 'YES'
        END,    
        'Business Group' = ISNULL(MetadataBG.Value,''),
        'CTN' = ISNULL(MetadataCT.Value,''),

错误

  

Msg 1038,Level 15,State 5,Line 277   对象或列名称缺失或为空。对于SELECT INTO语句,请验证每列是否具有名称。对于其他语句,请查找空别名。别名定义为""或[]是不允许的。将别名更改为有效名称。

3 个答案:

答案 0 :(得分:1)

您应该按照以下错误消息:"别名定义为""或[]不允许"和"验证每列的名称是":

SELECT NSO_Review = ISNULL(tblTaskEventsHistory.TimeIn,''),
       TimeIn = CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102))
        WHEN '1900' THEN  'NO'
        ELSE 'YES'
        END,

答案 1 :(得分:0)

如前所述,您应该使用DateTime函数。 为了比较日期的某些部分,有功能DATEPART (https://msdn.microsoft.com/en-us/library/ms174420.aspx)。

然后你可以尝试这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication4
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            XmlReader reader = XmlReader.Create(FILENAME);
            string id = "UMTS900";
            object coverages = null;
            while (!reader.EOF)
            {
                if (reader.Name != "Tech")
                {
                    reader.ReadToFollowing("Tech");
                }
                if (!reader.EOF)
                {
                    XElement tech = (XElement)XElement.ReadFrom(reader);
                    if((string)tech.Attribute("ID") == id)
                    {
                        coverages = tech.Descendants("Coverage").Select(x => new
                        {
                            id = (string)x.Attribute("ID"),
                            downLoad_Speed = (int)x.Element("DownLoad_Speed"),
                            upLoad_Speed = (int)x.Element("Upload_Speed"),
                        }).ToList();
                        break;
                    }
                }
            }



        }
    }

}

希望它会帮助你。

答案 2 :(得分:0)

您错过了案例陈述列的名称。