如何解决为什么 t-SQL 按日期时间排序在 SQL SMS 中正确,但在 ASP Classic 输出中不正确?
在 T-SQL 中查询下面的 select 时,输出按原样排序,但是当我在 Classic ASP 中使用 select 时,顺序不正确:
SELECT ChangeDate,ID,DataString,Operation,Area,ChangedBy
FROM EFP_LOG
WHERE Operation = 'Created'
ORDER BY ChangeDate DESC;
SQL Server Management Studio 中的输出为:
2021-06-06 21:13:17.177
2021-05-31 15:46:38.603
2021-05-31 15:43:21.967
2021-05-31 15:42:02.987
2021-05-31 15:41:44.493
...
Classic ASP 的输出是(输出格式正确显示:DD-MM-YYYY hh.mm.ss):
05-05-2021 21:33:54
05-05-2021 21:41:52
05-05-2021 21:43:46
05-05-2021 21:45:35
06-06-2021 21:13:17
07-04-2021 07:39:03
...
标签布局:
----------------------------------------------------------------------------
| PRIMARY KEY | COLUMN NAME | DATA TYPE | ALLOW NULL | DEFAULT VALUE |
----------------------------------------------------------------------------
| YES | ID | int | NO | Identity (1,1)|
| | DataString | VARCHAR(8000) | YES | |
| | Operation | VARCHAR(255) | YES | |
| | Area | VARCHAR(255) | YES | |
| | ChangedBy | VARCHAR(255) | YES | |
| | ChangeDate | datetime | NO | GetDate() |
| | ADdisplayName | VARCHAR(255) | YES | |
| | ADMail | VARCHAR(255) | YES | |
| | ADCompany | VARCHAR(255) | YES | |
| | ADdepartment | VARCHAR(255) | YES | |
| | ADtitle | VARCHAR(255) | YES | |
我尝试了几种使用 FORMAT、CAST 和 CONVERT 的方法,但它们都不起作用,可能是什么问题?
使用 ASP 代码更新:
<%
Set UserCreationLogConn = Server.CreateObject("ADODB.Connection")
UserCreationLogConn.ConnectionString="Provider=SQLOLEDB; DATA SOURCE=<SERVER>;UID=SA;PWD=<PASSWORD>;DATABASE=<DATABASE>"
UserCreationLogConn.Open
UserCreationLogSQL = "SELECT ChangeDate,ChangedBy,ADmail,ADcompany,ADdepartment,ADtitle FROM EFP_LOG WHERE Operation = 'Created' ORDER BY ChangeDate DESC;"
Set objUserCreationLog = UserCreationLogConn.Execute(UserCreationLogSQL)
While Not objUserCreationLog.EOF
Response.Write objUserCreationLog("ChangeDate")
objUserCreationLog.MoveNext
Wend
objUserCreationLog.Close
Set objUserCreationLog = Nothing
%>
SQL CREATE To 从 SMS 的输出:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EFP_LOG](
[ID] [int] IDENTITY(1,1) NOT NULL,[DataString] [varchar](8000) NULL,[Operation] [varchar](255) NULL,[Area] [varchar](255) NULL,[ChangedBy] [varchar](255) NULL,[ChangeDate] [datetime] NOT NULL,[ADdisplayName] [varchar](255) NULL,[ADmail] [varchar](255) NULL,[ADcompany] [varchar](255) NULL,[ADdepartment] [varchar](255) NULL,[ADtitle] [varchar](255) NULL,CONSTRAINT [PK_EFP_LOG] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[EFP_LOG] ADD CONSTRAINT [DF__EFP_LOG__ChangeD__4A0FA628] DEFAULT (getdate()) FOR [ChangeDate]
GO
解决方法
问题是使用 DataTables、查询和返回的日期时间列被视为文本字符串,因为它无法确定我的本地化。
在检查此页面后的解决方案 https://datatables.net/reference/option/columns.type 是将以下 columnDefs 添加到数据表中
$('#dtBasicExample').dataTable( {
"language": {
"url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Danish.json"
},"columnDefs": [
{ "type": "date","targets": 0 }
]
} );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。