SQL技术内幕-7 varchar类型的数字和 int 类型的数字的比较+cast的适用

DECLARE @x VARCHAR(10);
DECLARE @y INT;
DECLARE @z VARCHAR(10);

SET @x =  '1000';
SET @y =  '2000';
SET @z = '+3000';

  --第一种

SELECT
  CASE WHEN @x < @y THEN 'TRUE' ELSE 'FALSE' END AS [x<y?],
  CASE WHEN @y < @z THEN 'TRUE' ELSE 'FALSE' END AS [y<z?], 
  CASE WHEN @x < @z THEN 'TRUE' ELSE 'FALSE' END AS [x<z?]

  结果为

x<y? y<z? x<z?
TRUE TRUE FALSE

第二种

SELECT
  CASE WHEN @x < @y THEN 'TRUE' ELSE 'FALSE' END AS [CAST(x)<y?],
  CASE WHEN @y < @z THEN 'TRUE' ELSE 'FALSE' END AS [y<CAST(z)?], 
  CASE WHEN @x < @z THEN 'TRUE' ELSE 'FALSE' END AS [x<z?],
  CASE WHEN CAST(@x AS INT) < CAST(@z AS INT)
       THEN 'TRUE' ELSE 'FALSE' END AS [CAST(x)<CAST(z)?]

  结果为

CAST(x)<y? y<CAST(z)? x<z? CAST(x)<CAST(z)?
TRUE TRUE FALSE TRUE

原文地址:https://www.cnblogs.com/alphafly/p/4307258.html