在子查询中将Varchar转换为Int

时间:2014-03-02 18:50:26

标签: sql-server

我有一个像这样的查询

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'patientID,该列定义为INT 以及如何在此特定查询中将varchar转换为int?

我想将'6457PT'保存为INT字段中的patientid

提前致谢

纳温

1 个答案:

答案 0 :(得分: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,是指 6458 还是 112345

我希望这可以帮到你