0

次のフィールドを持つテーブルがあります

+-------------+----------+
|    name     |   dob    |
+-------------+----------+

名前:文字列。姓と名の両方を含む

dob: Date: 完全な生年月日を含む

フォームから、名の頭文字と生年月日を聞いています。としてモデルからそれらを取得するとしModel.codeますModel.BirthMonth

テーブル内のレコードをファーストネームの最初の文字と一致させるクエリが必要です。このため、フィールドをファーストネームとラストネームとして複数の部分に分割し、ファーストネームのファーストネームと比較する必要がありModel.codeます。

そのようなクエリの書き方がわかりません。

4

2 に答える 2

0

名前に「firstname lastname」がその順序で含まれていると仮定すると、クエリは次のようになります。

SELECT * FROM users
WHERE
    name LIKE '<model.code.passed.as.parameter>%'
AND DATEPART(mm, date) = <model.month.passed.as.parameter>

名前が「姓、名」の形式の場合、WHERE条件は次のようになります。

    name LIKE '%, <model.code.passed.as.parameter>%'

など、名前の形式に基づいています。

于 2012-08-27T02:30:41.320 に答える
0

あなたの名前が のように単純に連結されている場合はfirst-space-lastLIKEそれを行います。たとえば、(最初の) 名前が で始まるすべての行を取得するには、次のようにします'C'

SELECT * FROM tbl WHERE name LIKE 'C%'

名前文字列が formatlast-comma-space-firstであり、最後/最初の区切り文字が文字列内の唯一のコンマであることが保証されている場合:

SELECT * FROM tbl WHERE name LIKE '%, C%'

他の状況では、より複雑な何かが必要になります。おそらく、 , , 条件ステートメントとループを含むユーザー定義関数です。SUBSTRINGCHARINDEX

しかし、その場合は、データベースの設計を再考し、名前と姓を別々の列に格納する必要があります。分割に文字列関数を集中的に使用すると、通常、パフォーマンスが著しく低下するためです。

于 2012-08-27T02:30:45.463 に答える