在SQL Server CE中选择前两个字符

时间:2012-05-08 01:15:28

标签: sql sql-server-ce

[ANSWER]

谢谢大家!解决以下问题的代码是:

SELECT ID
FROM Schedule
WHERE (SUBSTRING(Time, 1, 2) = DATEPART(hh, GETDATE()))

如何在SQL Server CE中选择前两个字符?

例如:

+-----+-----------+------------+
+ Day +  Time     +  ID        +
+-----+-----------+------------+
+ 1   +  08:00:00 +  A1        +
+ 1   +  09:00:00 +  A2        +
+ 1   +  09:30:00 +  A3        +
+ 1   +  10:15:00 +  A4        + 
+-----+-----------+------------+

Time列是nvarchar类型。

然后,我想仅根据实际时间选择ID,例如只选择08中的08:00:00部分。我怎么能这样做?

3 个答案:

答案 0 :(得分:8)

SUBSTRING在CE中可用 - http://msdn.microsoft.com/en-us/library/aa275646(SQL.80).aspx

SUBSTRING ( expression , start , length )

答案 1 :(得分:2)

SQL Standard方法由语法图给出:

<character substring function> ::=
         SUBSTRING <left paren> <character value expression> FROM <start position>
         [ FOR <string length> ] [ USING <char length units> ] <right paren> 

因此,在这个例子中:

SELECT SUBSTRING(Time FROM 1 FOR 2) FROM AnonymousTable;

某些DBMS(Oracle和那些模拟Oracle)提供了一个SUBSTR()函数:

SELECT SUBSTR(Time, 1, 2) FROM AnonymousTable;

1是起始偏移量,从1开始计算,2是长度(不是结束偏移量,尽管它们对于此示例是相同的,以及任何其他起始位置1)。

您的特定DBMS可能还有其他方法。例如,使用Informix,您可以编写:

SELECT Time[1,2] FROM AnonymousTable;

这次,下标是开始和停止位置。

Informix支持所有这三个。我不知道任何其他使用下标符号的DBMS。

答案 2 :(得分:1)

你的意思是这样吗?

SELECT LEFT(Time, 2) From Table