Попробуйте это:
Select
A
from #tmp
group by A
Having
count(*)=count(case when c=0 then 0 else null end)
EBCDIC имеет много 8-битных кодовых страниц. Многие из них поддерживаются ВМ. Взгляните на Charset.availableCharsets (). KeySet ()
, страницы EBCDIC названы IBM ...
(существуют псевдонимы, такие как cp500
для IBM500
, как вы можете видеть по Charset.forName ("IBM500"). aliases ()
).
Есть две проблемы:
Во-первых, есть посмотрите на этот подход . Во-вторых, попробуйте желаемое время выполнения цели; -)
Предполагая, что ваша целевая система является мэйнфреймом или средним диапазоном IBM, она имеет полную поддержку всех кодировок EBCDIC, встроенных в ее JVM, в виде кодировок с именем CPxxxx, соответствующих IBM CCSID (CP обозначает код -page). Вам нужно будет выполнить переводы на стороне хоста, поскольку на стороне клиента не будет необходимой поддержки кодирования.
Поскольку Unicode - это DBCS и выше и поддерживает все известные символы, вы, вероятно, будете использовать несколько кодировок EBCDIC; так что вы, скорее всего, настроите эти кодировки каким-либо образом. Попробуйте использовать только свой клиентский Unicode (UTF-8, UTF-16 и т. Д.), Причем переводы выполняются по мере того, как данные поступают на хост и / или покидают хост-систему.
Кроме необходимости выполнять переводы на стороне хоста. механика та же, что и у любого перевода Java; например, новая строка (байты, encoding) и String.getBytes (encoding), а также различные классы NIO и записи. В действительности нет никакой магии - она ничем не отличается от перевода, скажем, между ISO 8859-x и Unicode или любым другим SBCS (или ограниченной DBCS).
Например:
byte[] ebcdta="Hello World".getBytes("CP037"); // get bytes for EBCDIC codepage 37
Вы можете найти больше информации в IBM веб-сайт документации .
Для среднего класса AS / 400 (IBM i в наши дни) лучше всего использовать IBM Java Toolkit (jt400.jar), который делает все эти вещи прозрачно (возможно, слегка намекнул).
Обратите внимание, что внутри Java символ является 16-битным значением, а не UTF-8 (это кодировка).
Вы всегда можете использовать IBM Toolbox for Java ( JTOpen ), в частности класс com.ibm.as400.access.AS400Text
в jt400.jar.
Это выглядит следующим образом:
int codePageNumber = 420;
String codePage = "CP420";
String sourceUtfText = "أحمد يوسف صالح";
AS400Text converter = new AS400Text(sourceUtfText.length(), codePageNumber);
byte[] bytesData = converter.toBytes(sourceUtfText);
String resultedEbcdicText = new String(bytesData, codePage);
Я использовал кодовую страницу 420 и соответствующее ей представление java кодировки CP420 , эта кодовая страница используется для арабского текста, поэтому вам следует выбрать подходящую кодовую страницу для китайского текста.