为什么 t-SQL 按日期时间排序在 SQL SMS 中正确但在 ASP Classic 输出中不正确?
Why is t-SQL order by datetime correct in SQL SMS but not in ASP Classic output?
在 T-SQL 中查询下面的 select 时,输出按应有的顺序排列,但是当我在经典 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 的方法,但其中 none 有效,可能是什么问题?
更新为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, ID, DataString, Operation, Area, 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 从 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 }
]
} );
在 T-SQL 中查询下面的 select 时,输出按应有的顺序排列,但是当我在经典 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 的方法,但其中 none 有效,可能是什么问题?
更新为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, ID, DataString, Operation, Area, 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 从 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 }
]
} );