在 SQL 中使用通配符定义上次登录时间时的 WHERE 子句
WHERE clause when defining last logon time with wildcard in SQL
我进行了搜索,但没有找到与我的问题相关的任何内容:
SELECT
vSMS_R_System.Netbios_Name0 AS 'Name',
vSMS_R_System.Distinguished_Name0 AS 'LDAP',
vSMS_R_System.Operating_System_Name_and0 AS 'OS Version',
vSMS_R_System.Last_Logon_Timestamp0 AS 'Last Logon Time',
vSMS_R_System.Active0 AS 'Active State'
FROM
vSMS_R_System
WHERE
Distinguished_Name0 LIKE '%Site Servers%'
AND Operating_System_Name_and0 LIKE 'Microsoft Windows NT Server 6.%'
AND Last_Logon_Timestamp0 LIKE '%2017-02%'
执行此查询时,不会显示任何结果,但是删除最后一行将毫无问题地执行结果。这似乎是 Last_Logon_Timestamp0
的通配符,这是这里的一个问题。
我已将查询的最后一行修改为以下内容:
AND Last_Logon_Timestamp0 LIKE '%2017%'
这显示了我需要的结果。所以它似乎是在我的原始查询中声明通配符值时导致问题的连字符。
是否需要以不同方式处理此信息?连字符似乎不是非法字符,但它确实阻止了信息的显示。
假设 last_logon_timestamp0
是某种 datetime
,那么您应该使用 date
/time
函数,而不是字符串函数。所以:
SELECT s.Netbios_Name0 AS Name,
s.Distinguished_Name0 AS LDAP,
s.Operating_System_Name_and0 AS [OS Version],
s.Last_Logon_Timestamp0 AS [Last Logon Time],
s.Active0 AS [Active State]
FROM vSMS_R_System s
WHERE s.Distinguished_Name0 LIKE '%Site Servers%' AND
s.Operating_System_Name_and0 LIKE 'Microsoft Windows NT Server 6.%' AND
s.Last_Logon_Timestamp0 >= '2017-02-01' AND
s.Last_Logon_Timestamp0 < '2017-03-01' ;
备注:
- 您的代码使用恰好设置的任何国际化设置将该列转换为本地 date/time 表示。
- 时间比较允许数据库在列上使用索引(如果可用)。
- Table 别名使查询更易于编写和阅读。
- 不要对列名使用单引号,因为它们很容易与字符串常量混淆。它们应该只用于字符串和日期常量。
- 尽量避免使用空格和其他非标准变量的列别名,这样您就不需要对名称进行转义。
我进行了搜索,但没有找到与我的问题相关的任何内容:
SELECT
vSMS_R_System.Netbios_Name0 AS 'Name',
vSMS_R_System.Distinguished_Name0 AS 'LDAP',
vSMS_R_System.Operating_System_Name_and0 AS 'OS Version',
vSMS_R_System.Last_Logon_Timestamp0 AS 'Last Logon Time',
vSMS_R_System.Active0 AS 'Active State'
FROM
vSMS_R_System
WHERE
Distinguished_Name0 LIKE '%Site Servers%'
AND Operating_System_Name_and0 LIKE 'Microsoft Windows NT Server 6.%'
AND Last_Logon_Timestamp0 LIKE '%2017-02%'
执行此查询时,不会显示任何结果,但是删除最后一行将毫无问题地执行结果。这似乎是 Last_Logon_Timestamp0
的通配符,这是这里的一个问题。
我已将查询的最后一行修改为以下内容:
AND Last_Logon_Timestamp0 LIKE '%2017%'
这显示了我需要的结果。所以它似乎是在我的原始查询中声明通配符值时导致问题的连字符。
是否需要以不同方式处理此信息?连字符似乎不是非法字符,但它确实阻止了信息的显示。
假设 last_logon_timestamp0
是某种 datetime
,那么您应该使用 date
/time
函数,而不是字符串函数。所以:
SELECT s.Netbios_Name0 AS Name,
s.Distinguished_Name0 AS LDAP,
s.Operating_System_Name_and0 AS [OS Version],
s.Last_Logon_Timestamp0 AS [Last Logon Time],
s.Active0 AS [Active State]
FROM vSMS_R_System s
WHERE s.Distinguished_Name0 LIKE '%Site Servers%' AND
s.Operating_System_Name_and0 LIKE 'Microsoft Windows NT Server 6.%' AND
s.Last_Logon_Timestamp0 >= '2017-02-01' AND
s.Last_Logon_Timestamp0 < '2017-03-01' ;
备注:
- 您的代码使用恰好设置的任何国际化设置将该列转换为本地 date/time 表示。
- 时间比较允许数据库在列上使用索引(如果可用)。
- Table 别名使查询更易于编写和阅读。
- 不要对列名使用单引号,因为它们很容易与字符串常量混淆。它们应该只用于字符串和日期常量。
- 尽量避免使用空格和其他非标准变量的列别名,这样您就不需要对名称进行转义。