无子查询SQL Server的CONCAT列

无子查询SQL Server的CONCAT列,sql,sql-server,tsql,subquery,concat,Sql,Sql Server,Tsql,Subquery,Concat,我想看看是否有更好的方法来解决这个问题 日期字段的格式为-06-03-2018 我需要一个类似于Mar-18的专栏 e、 g 这给了我想要的结果,但我想知道是否有任何方法可以在没有子查询的情况下得到相同的结果。谢谢您可以直接进行连接 SELECT CAST(LEFT(datename(MONTH, [Date]), 3) AS VARCHAR(20)) +'-'+ CAST(RIGHT(YEAR([Date]), 2) AS VARCHAR(20)) FROM

我想看看是否有更好的方法来解决这个问题

日期字段的格式为-06-03-2018

我需要一个类似于Mar-18的专栏 e、 g


这给了我想要的结果,但我想知道是否有任何方法可以在没有子查询的情况下得到相同的结果。谢谢

您可以直接进行连接

SELECT 
    CAST(LEFT(datename(MONTH, [Date]), 3) AS VARCHAR(20))
    +'-'+
    CAST(RIGHT(YEAR([Date]), 2) AS VARCHAR(20))
    FROM Table1;

您可以直接进行连接

SELECT 
    CAST(LEFT(datename(MONTH, [Date]), 3) AS VARCHAR(20))
    +'-'+
    CAST(RIGHT(YEAR([Date]), 2) AS VARCHAR(20))
    FROM Table1;

为什么不将日期格式化为

select format(convert(date, '06-03-2018', 103), 'MMM-yy')

为什么不将日期格式化为

select format(convert(date, '06-03-2018', 103), 'MMM-yy')

您提供的查询无效,您需要在列声明(缺少)之间使用逗号(

无论如何,查询可以简化为:

SELECT LEFT(DATENAME(MONTH,[Date]),3) + '-' + RIGHT(YEAR([Date]),2) AS [Month-Year]
FROM Table1;

我没有在这里使用
CONCAT
,因为没有必要(因为两个值都是
NULL
或者都有一个值)。

您提供的查询无效,在列声明之间需要一个逗号(

无论如何,查询可以简化为:

SELECT LEFT(DATENAME(MONTH,[Date]),3) + '-' + RIGHT(YEAR([Date]),2) AS [Month-Year]
FROM Table1;

我在这里没有使用
CONCAT
,因为没有必要(因为两个值都是
NULL
或有一个值).

您不需要子查询或
datename
等。您可以使用格式设置值的格式,例如在旧版本的SQL Server中使用格式代码设置datetime或
CONVERT
。即使要使用
datename
也可以将所有内容设置为单选
SELECT格式(getdate(),'MMM-yy'))
足够了。设置日期格式的最佳位置是客户端,而不是查询。指定所需格式、区域性(ie语言)更容易、更快在控件或报表的格式属性上设置等。在数据库中设置格式的最快选项可能是根本不执行此操作。创建一个日历表,为月名、年份或您希望在报表中使用的任何格式添加额外的列。这将允许报表工具按不需要子查询或
datenam的格式化值进行筛选e
等。您可以使用格式设置值的格式,例如在旧版本的SQL Server中使用格式代码设置日期时间或转换。即使您想使用
日期名称
也可以将所有内容设置为单一选择
选择格式(getdate(),'MMM-yy')
足够了。设置日期格式的最佳位置是客户端,而不是查询。指定所需格式、区域性(ie语言)更容易、更快在控件或报表的格式属性上设置等。在数据库中设置格式的最快选项可能是根本不设置格式。创建一个日历表,为月名、年份或您希望在报表中使用的任何格式添加额外的列。这将允许报表工具按格式值进行筛选我觉得我必须经常提到
FORMAT
是一个相当慢的函数。使用单个值或2“很好”,但对于大型数据集,我建议避免使用它。@Larnu调用datename、year然后连接不会更快。正确的格式化方法是客户端,而不是服务器非常有用!谢谢:)@PanagiotisKanavos想下注吗?我对2393770行的答案是:
CPU时间=2250毫秒,运行时间=13749毫秒。
。使用
格式:
CPU时间=84453毫秒,运行时间=94860毫秒。
。我想说这要快得多。我建议在你做出这样的陈述之前做一些测试。:)根据经验,
FORMAT
是一个糟糕的函数,因为它的速度太慢了。这是一个好主意,但它需要很多改进。然而,并不是说正确的格式化方式不在客户端(是的,我同意这一点);仅仅是
DATENAME
Year
和连接要比使用
FORMAT
快得多,我觉得我必须经常提到
FORMAT
是一个相当慢的函数。使用单个值或2“可以”,但对于大型数据集,我建议避免使用它。@Larnu调用datename、year,然后连接不会更快。正确的格式化方式是客户端,而不是服务器。非常有用!谢谢:)@PanagiotisKanavos想打赌吗?我对2393770行的回答是:
CPU时间=2250毫秒,运行时间=13749毫秒。
。使用
格式
CPU时间=84453毫秒,运行时间=94860毫秒。
。我得说这要快得多。我建议在你发表这样的声明之前做一些测试。:)根据经验,
格式
是一个糟糕的功能,因为它有多慢。这是一个好主意,但它需要很多改进。然而,并不是说正确的格式化方式不在客户端(是的,我同意这一点);仅仅是
日期名
年份
和连接比使用
格式