2014-03-02 27 views
0

我有一個這樣的查詢轉換的Varchar在一個子查詢

DECLARE @patientId INT 

SET @patientId = 0 

IF EXISTS(SELECT TOP 1 SUBSTRING(TRN02, 1, CHARINDEX('-', TRN02) - 1) 
      FROM EDI_X12.dbo.X12_TRN 
      WHERE X12_Interchange_GUID = 'd6803485-3f46-485c-8288-2cfc98ec7088' 
       AND TRN02 LIKE '%-%')) 
BEGIN 
SET @patientId = (SELECT TOP 1 SUBSTRING(TRN02, 1, CHARINDEX('-', TRN02) - 1) 
        FROM EDI_X12.dbo.X12_TRN 
        WHERE X12_Interchange_GUID = @px12_interchange_guid 
         AND TRN02 LIKE '%-%') 
END 

TRN02值有些事情是112345-6458PT這裏'6457PT'到int是patientID列被定義爲INT 以及如何轉換爲varchar到int在這個特定的查詢?

我要救 '6457PT' 爲INT場patientid

在此先感謝

納文

+1

它是從'112345-6458PT',你想提取'6458'? – Unnie

+1

你不需要'EXISTS'檢查。只需使用'SELECT TOP 1 @patientId = SUBSTRING'。如果沒有行匹配,則不進行分配。另外爲什麼沒有'ORDER BY'? –

回答

1

試試這個

DECLARE @patientId int; 

SELECT @patientId = CAST(SUBSTRING(TRN02, 1, CHARINDEX('-', TRN02) - 1) as INT) 
     FROM EDI_X12.dbo.X12_TRN 
     WHERE X12_Interchange_GUID = 'd6803485-3f46-485c-8288-2cfc98ec7088' 
      AND TRN02 LIKE '%-%' 

IF @patientId is null 
BEGIN 
    SET @patientId = 0; 
END 

這樣你只有一個選擇instaed兩個(你不需要檢查該行是否存在)。 但是你不能將價值6458PT轉換爲INT,你的意思是或?

我希望這可以幫助你

+0

非常感謝你.. – Naveen