String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true
Убедитесь, что вы понимаете, почему. Это потому, что сравнение ==
сравнивает только ссылки; equals()
метод сопоставляет содержимое по символу.
Когда вы вызываете new для a
и b
, каждый получает новую ссылку, указывающую на "foo"
в таблице строк. Ссылки разные, но контент один и тот же.
Сделайте скалярную функцию для использования каждый раз
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE FUNCTION FormatBracket(@Value as money)
RETURNS varchar(30)
AS
BEGIN
DECLARE @RETVAL AS varchar(30);
select
@retval = case when @VALUE < 0 THEN
'(' + cast(ABS(@value) as varchar(28)) + ')'
else
cast(@value as varchar(28))
END;
RETURN @RETVAL;
END
GO
, затем
SELECT num, dbo.FormatBracket(num)
AS frmtd
FROM (
SELECT 0 AS num UNION ALL
SELECT 945 UNION ALL
SELECT -945
) tests
Я использовал тип переменной MONEY, который может быть любым числовым типом, я не деньги наверняка были в 2005 году