Почему я не могу фильтровать на IS NOT NULL в этом запросе [duplicate]

Это отмечено как дубликат для печати байта [] . Примечание: для массива байтов существуют дополнительные методы, которые могут быть подходящими.

Вы можете напечатать его как строку, если он содержит символы ISO-8859-1.

String s = new String(bytes, StandardChars.ISO_8559);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.ISO_8559);

или если он содержит строку UTF-8

String s = new String(bytes, StandardChars.UTF_8);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.UTF_8);

или если вы хотите напечатать ее как шестнадцатеричную.

String s = DatatypeConverter.printHexBinary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseHexBinary(s);

или если вы хотите напечатать ее как base64.

String s = DatatypeConverter.printBase64Binary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseBase64Binary(s);

или если вы хотите напечатать массив подписанных байтовых значений

String s = Arrays.toString(bytes);
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = Byte.parseByte(split[i]);

или если вы хотите напечатать массив значений без знакового байта

String s = Arrays.toString(
               IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray());
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check.

93
задан Btuman 25 July 2013 в 15:14
поделиться

17 ответов

Хотя вы можете псевдонизировать свои таблицы в своем запросе (т. е. «SELECT u.username FROM users u;»), вы должны использовать фактические имена столбцов, на которые вы ссылаетесь. AS влияет только на то, как возвращаются поля.

0
ответ дан Blumer 23 August 2018 в 17:55
поделиться

Либо:

SELECT u_name AS user_name
FROM   users
WHERE  u_name = "john";

, либо:

SELECT user_name
from
(
SELECT u_name AS user_name
FROM   users
)
WHERE  u_name = "john";

Последнее должно быть таким же, как и первое, если RDBMS поддерживает сканирование предикатов в поточном представлении.

6
ответ дан David Aldridge 23 August 2018 в 17:55
поделиться

См. следующую страницу руководства по MySQL: http://dev.mysql.com/doc/refman/5.0/en/select.html

"A select_expr может быть присвоен псевдоним с использованием AS alias_name. Псевдоним используется как имя столбца выражения и может использоваться в предложениях GROUP BY, ORDER BY или HAVING. "

(... )

Нельзя ссылаться на псевдоним столбца в предложении WHERE, поскольку значение столбца может еще не определяться при выполнении предложения WHERE. См. Раздел B.5.4.4 «Проблемы с псевдонимами столбцов».

28
ответ дан David Lopez 23 August 2018 в 17:55
поделиться

У меня была та же проблема, я нашел это полезным.

mysql_query("SELECT * FROM `users` WHERE `user_name`='$user'");

не забудьте поставить $ user в '' одинарные кавычки.

1
ответ дан devWaleed 23 August 2018 в 17:55
поделиться

Может быть, это помогает.

Вы можете

SET @somevar := '';
SELECT @somevar AS user_name FROM users WHERE (@somevar := `u_name`) = "john";

Он работает.

НО УБЕДИТЕСЬ, ЧТО ВЫ ДЕЛАЕТЕ!

  • Индексы НЕ ИСПОЛЬЗУЮТСЯ здесь
  • Будет сканироваться FULL TABLE - вы не указали часть LIMIT 1
  • Итак, - ЭТОТ QUERY БУДЕТ SLLLOOOOOOW на огромных столах .

Но может быть, это помогает в некоторых случаях

1
ответ дан F_S 23 August 2018 в 17:55
поделиться

SQL оценивается в обратном направлении, справа налево. Таким образом, выражение where анализируется и оценивается перед предложением select. Из-за этого псевдонимы u_name для user_name еще не произошли.

76
ответ дан idmean 23 August 2018 в 17:55
поделиться

Нет, вы не можете. user_name не существует до времени возврата.

3
ответ дан Jarrett Meyer 23 August 2018 в 17:55
поделиться
SELECT user_name
FROM
(
SELECT name AS user_name
FROM   users
) AS test
WHERE  user_name = "john"
2
ответ дан Jason Plank 23 August 2018 в 17:55
поделиться

Если вы пытаетесь выполнить такой запрос, как показано ниже (найдите все узлы с хотя бы одним вложением), где вы использовали оператор SELECT для создания нового поля, которое фактически не существует в базе данных, и попробуйте использовать псевдоним для этого результата, вы столкнетесь с той же проблемой:

SELECT nodes.*, (SELECT (COUNT(*) FROM attachments 
WHERE attachments.nodeid = nodes.id) AS attachmentcount 
FROM nodes
WHERE attachmentcount > 0;

Вы получите сообщение об ошибке «Неизвестный столбец« attachmentcount »в разделе WHERE».

Решение на самом деле довольно просто - просто замените псевдоним выражением, создающим псевдоним, например:

SELECT nodes.*, (SELECT (COUNT(*) FROM attachments 
WHERE attachments.nodeid = nodes.id) AS attachmentcount 
FROM nodes 
WHERE (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) > 0;

. Вы все равно получите возвращаемый псевдоним, но теперь SQL не должен биться с неизвестным псевдоним.

10
ответ дан Jon 23 August 2018 в 17:55
поделиться

попробуйте выполнить свою задачу, используя условие IN или условие OR, а также этот запрос работает на spark-1.6.x

 SELECT  patient, patient_id FROM `patient` WHERE patient IN ('User4', 'User3');

или

SELECT  patient, patient_id FROM `patient` WHERE patient = 'User1' OR patient = 'User2';
0
ответ дан KARTHIKEYAN.A 23 August 2018 в 17:55
поделиться

Ваши определенные alias не приветствуются предложением WHERE, вы должны использовать предложение HAVING для этого

SELECT u_name AS user_name FROM users HAVING user_name = "john";

ИЛИ вы можете напрямую использовать имя исходного столбца с помощью кнопки WHERE

SELECT u_name AS user_name FROM users WHERE u_name = "john";

То же, что и результат в пользовательском псевдониме в результате подзапроса или любого вычисления, к которому он будет доступен в HAVING, а не в WHERE

SELECT u_name AS user_name ,
(SELECT last_name FROM users2 WHERE id=users.id) as user_last_name
FROM users  WHERE u_name = "john" HAVING user_last_name ='smith'
6
ответ дан M Khalid Junaid 23 August 2018 в 17:55
поделиться

Как насчет:

SELECT u_name AS user_name FROM users HAVING user_name = "john";
27
ответ дан Marcus Adams 23 August 2018 в 17:55
поделиться
select u_name as user_name from users where u_name = "john";

Подумайте об этом так, ваше предложение where сначала оценивает, чтобы определить, какие строки (или объединенные строки) должны быть возвращены. После того, как предложение where выполняется, для него выполняется предложение select.

Чтобы это было лучше, представьте это:

select distinct(u_name) as user_name from users where u_name = "john";

Вы не можете ссылаться на первую половину без второй. Где всегда сначала оценивается, а затем предложение select.

12
ответ дан Mark S. 23 August 2018 в 17:55
поделиться

Нет, вам нужно выбрать его с правильным именем. Если вы дали таблицу, которую вы выбираете из псевдонима, вы можете использовать это.

4
ответ дан Per Hornshøj-Schierbeck 23 August 2018 в 17:55
поделиться

Насколько я знаю в MS-SQL 2000/5. В прошлом я обманывал это.

0
ответ дан Rob McInnes 23 August 2018 в 17:55
поделиться

исправлено:

SELECT u_name AS user_name FROM users WHERE u_name = 'john';
5
ответ дан Steven A. Lowe 23 August 2018 в 17:55
поделиться

У вас была эта проблема.

Убедитесь, что в базе данных нет места в имени объекта.

, например. 'user_name' вместо 'user_name'

1
ответ дан user3103155 23 August 2018 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: