2016-12-01 7 views
0

Я установил свой стол так.Sap Hana IN Оператор для колонны конкатенации

дизайн Таблица

COLUMN_1 VARCHAR 100 PRIMARY KEY 
COLUMN_2 VARCHAR 100 

Таблица записей

COLUMN_1 | COLUMN_2 
Test  | 104312 

Почему этот запрос возвращает значение, если значение существует в таблице?

SELECT * 
FROM [TABLE] 
WHERE (CONCAT([COLUMN_1], [COLUMN_2]) = 'Test104312'); 
+0

'SELECT CONCAT (col1, col2) FROM TABLE' возвращает' Test104312'? – sagi

+0

есть ли пробел_? так что вам нужно обрезать? –

ответ

0

Ваш код работает для MS SQL.

  DECLARE @table TABLE (COLUMN_1 varchar(11), COLUMN_2 varchar(10)) 
      INSERT @table VALUES ('Test','104312') 

      select *,concat(COLUMN_1,COLUMN_2) from @table 
      WHERE(concat(COLUMN_1,COLUMN_2) = 'Test104312'); 

Выход:

COLUMN_1 COLUMN_2 (No column name) 
Test  104312  Test104312 
+0

это не ответ –

0

Может быть, есть что-то дополнительное проблема пространства в табличных данных, так что вы можете попробовать с помощью TRM следующим образом:

WHERE(concat(TRIM(COLUMN_1),TRIM(COLUMN_2)) = 'Test104312') 
2

Использование NVARCHAR

Решение состоит в том, чтобы изменить дизайн таблицы для использования NVARCHAR (100) вместо VARCHAR (100).

Тип NVARCHAR не будет заполнять значения пробелом и есть другие преимущества.

дизайн Таблица

COLUMN_1 NVARCHAR 100 PRIMARY KEY 
COLUMN_2 NVARCHAR 100 

Дальнейшее чтение:

+1

Хороший улов! ... –

0

Запрос не возвращает значение, потому что значение не существует в ваш стол. Возможно, ваша таблица содержит то, что выглядит одинаково, но содержит пробелы или другие неприменимые символы. И это не имеет ничего общего с VARCHAR (100) и NVARCHAR (100) в HANA afaik. VARCHAR (100) может содержать 100 символов ASCII и 100 или менее символов Unicode, в зависимости от того, сколько символов с символами UTF8 или более байт включено в строку. NVARCHAR (100) может содержать 100 символов Unicode. Вот пример:

create column table "TABLE" 
(COLUMN_1 NVARCHAR(100) PRIMARY KEY, 
    COLUMN_2 NVARCHAR(100)); 
Insert into "TABLE" (Column_1, Column_2) values ('Test', '104312'); -- will be found 
Insert into "TABLE" (Column_1, Column_2) values ('Test ', '104312'); --will not be found, space 
Insert into "TABLE" (Column_1, Column_2) values ('Test' || nchar(13), '104312'); --will not be found, non-printable 

Select * from "TABLE"; -- will list all three entries 

enter image description here

SELECT * FROM "TABLE" --will list only the first entry 
    WHERE (CONCAT("COLUMN_1", "COLUMN_2") = 'Test104312'); 

enter image description here

Кроме того, синтаксис используется для цитирования identifieres с помощью скобок не работает в HANA (или есть некоторая особенность, которую я не знаю,), скобки могут использоваться в MS-SQL. Экзамен работает как в хранилище строк, так и столбцов. Трюк, чтобы обнаружить непечатаемые символы, - это вырезать результат из HANA Studio и передать его в блокнот ++.

Смежные вопросы