2012-05-08 22 views
4

の最初の2つの文字を選択し、[ANSWER]SQL Server CEの

みんなありがとう!下記の問題を解決するためのコードは次のとおりです。

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

SQL Server CEの最初の2つの文字を選択する方法?例えば

+-----+-----------+------------+ 
+ 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:00:00から08部分のみを選択してください。どうやってやるの?

+0

あなたの時間の列がVARCHAR型であってはなりません。 TIME型でなければなりません。 –

+0

どのデータベースエンジンですか? MSFT、Oracle、DB2は、すべてこのために異なる方法を使用します。 – xQbert

+0

使用しているSQL DBMSとテーブルの名前の両方を識別するようにしてください(答えがすべて同じ名前を使用できるようにする場合にのみ、質問の目的で作成された名前にすることができます)。 –

答えて

1

このような意味ですか?

SELECT LEFT(Time, 2) From Table 
+0

正確です。しかし、それは動作しませんでした。 「SQL Server Compactでは関数が認識されません。 [関数の名前= SUBSTR、データ型(わかっている場合)=] ' –

2

SQL標準法を構文図で与えられる。

したがって
<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、およびオラクルをエミュレートするもの)を提供代わりにSUBSTR()関数:

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

1は開始オフセットで、1から数えて、2は長さです(この例では同じですが、開始点が1であるにもかかわらず仕上げオフセットではありません)。

特定のDBMSには他の方法があります。たとえば、Informixのとあなたが書くことができる:

SELECT Time[1,2] FROM AnonymousTable; 

この時間は、しかし、添字は、起動と停止位置です。

Informixは、これら3つすべてをサポートしています。添え字表記法を使用する他のDBMSについて私は知らない。

+0

動作できませんでした。 「SQL Server Compactでは関数が認識されません。 [関数名= SUBSTR、データ型(既知の場合)=] ' –

+0

OK - DBMSを前もって指定することが重要である理由が分かりました。 –

+1

@ mrjimoy_05:私の答えを受け入れていただきありがとうございますが、「受け入れ」は[Chris Gessler]に属しています(http://stackoverflow.com/questions/10491251/select-the-first-two-character-in-sqlce/10491335#10491335)、彼はSQL Serverに必要な構文を提供しているのに対して、私の場合はより一般的な答えです。この答えを受け入れずに、代わりに彼の答えを受け入れてください。 (もし私がまだ私に1つも与えていないなら、私はうれしく投票を受け入れます)。ありがとう。 –

関連する問題