如何根据DESC在SQL Server中排序nvarchar时间值

时间:2018-03-28 04:31:19

标签: sql-server database

数据示例:

AtrxId      AtrxDate   AtrxTime  AtrxDes
------------------------------------------
CAS-000001  05-03-2018  12:43 PM  Cash
INV-000001  05-03-2018  11:04 AM  Credit

我需要根据特定日期的时间排序输出:

AtrxId      AtrxDate   AtrxTime   AtrxDes
-----------------------------------------
INV-000001  05-03-2018 11:04 AM   Credit
CAS-000001  05-03-2018 12:43 PM   Cash

2 个答案:

答案 0 :(得分:2)

1)为什么它是nvarchar?只是问......这可能会给你造成许多问题,除非你需要它是nvarchar,因为它有时需要接受无效的日期。

这应该有效。这假设AtrxDate和AtrxTime都是nvarchar。它还假定字段中始终存在有效的日期和时间。如果其中一个无效,那么TRY_CONVERT将返回null,这基本上意味着它们将首先排序:

SELECT
    AtrxId
    , AtrxDate
    , AtrxTime
    , AtrxDes
FROM tablenamehere t
ORDER BY TRY_CONVERT(AtrxDate + ' ' + AtrxTime AS datetime) DESC

我不确定您是否希望按日期/时间按顺序列出前向或后向顺序(示例按正向顺序列出,但问题的主题行显示为DESC),但如果您希望按顺序排列,则为只需用ASC替换DESC即可。 :)

答案 1 :(得分:0)

您可以尝试以下查询。根据您的分类要求,输入“ASC”或“DESC

DECLARE @TABLE TABLE (AtrxId VARCHAR(100), AtrxDate DATE,  AtrxTime TIME, AtrxDes VARCHAR(100))

INSERT INTO @TABLE
SELECT 'CAS-000001', '05-03-2018', '12:43 PM', 'Cash' UNION ALL SELECT 'INV-000001','05-03-2018','11:04 AM','Credit'

SELECT * FROM @TABLE ORDER BY AtrxDate,AtrxTime

或者您可以尝试以下select查询

SELECT * FROM @TABLE ORDER BY CONVERT(DATETIME, CONVERT(CHAR(8), AtrxDate, 112) 
  + ' ' + CONVERT(CHAR(8), AtrxTime, 108))