2012-08-27 41 views
0

我有一個表具有以下字段如何編寫一個查詢來選擇連續被劈裂場

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

名稱比較:字符串。同時包含名字和姓氏

出生日期:日期:包含出生

的完整的日期從一種形式,我要求的姓名和出生月份的第一個字母。讓我們假設我從模型中獲取他們作爲Model.codeModel.BirthMonth

我需要一個查詢匹配與首字母名字表中的記錄,爲了這個,我需要到外地分割成多個部分的姓氏和名字和比較Model.code與名字的第一個字母。

我不知道如何編寫這樣的查詢。

+0

你爲什麼要拆分?是否在字段中的邏輯順序總是相同? –

+0

@羅傑泰勒,是的 – mrN

回答

0

假設名稱包含的順序「姓」,查詢將

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>%' 

等,基於名稱的格式。

0

如果你的名字只是會連接起來爲first-space-lastLIKE將做到這一點。例如,要得到所有行(第一)的名字與'C'開始:

SELECT * FROM tbl WHERE name LIKE 'C%' 

如果你的名字字符串格式last-comma-space-first,最後/第一分離器是保證字符串中唯一的逗號:

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

任何其他情況下將需要更復雜的東西,可能是user-defined function涉及SUBSTRINGCHARINDEX,條件語句,也許循環。

但是,如果是那樣的話,你或許應該重新考慮數據庫設計,並存儲名字和姓氏在單獨的列,因爲集約利用一個分裂的字符串函數通常意味着明顯的性能下降。