2014-03-02 26 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