双击安装文件
.png)
选择同意协议,下一步
.png)
实例名称默认IRISHEALTH,不需要修改,直接下一步
.png)
安装路径,可修改,但不可使用中文路径
.png)
安装类型选择Development,点击下一步
.png)
选择Unicode,下一步
.png)
选择Normal,下一步
.png)
默认选项,不做修改,下一步
.png)
输入IRIS管理账户密码
.png)
输入CSP服务管理密码,和上一步密码保持一致。
.png)
点击安装,等待安装成功
.png)
双击安装文件
.png)
选择同意协议,下一步
.png)
实例名称默认IRISHEALTH,不需要修改,直接下一步
.png)
安装路径,可修改,但不可使用中文路径
.png)
安装类型选择Development,点击下一步
.png)
选择Unicode,下一步
.png)
选择Normal,下一步
.png)
默认选项,不做修改,下一步
.png)
输入IRIS管理账户密码
.png)
输入CSP服务管理密码,和上一步密码保持一致。
.png)
点击安装,等待安装成功
.png)
Object Script(六)
ObjectScript中的变量是没有类型的,也就是说,它们没有一个指定的数据类型,可以接受任何数据值。
ObjectScript支持以下几种类型的变量:
1. 本地变量 :只有创建它的进程可以访问的变量,当该进程终止时,改变量将自动删除。一个本地变量可以从任何命名空间访问。
示例:
SET str = "A string"
2. 进程私有的全局变量 : 只有创建它的进程可以访问的变量,并且在进程结束时不再存在。一个进程专用的全局变量可以从任何命名空间访问,因为它与命名空间无关。进程私有的全局变量对于临时存储大数据值特别有用。在许多情况下,它们可以替代Mgr/Temp目录的使用,在进程终止时提供自动清理。
示例:
SET ^||flintstones(1)="Fred"
SET ^||flintstones(2)="Wilma"
3. 全局变量 : 一个存储在InterSystems IRIS数据库中的持久性变量。一个全局变量可以从任何进程中访问,并且在创建它的进程终止后仍然存在。全局变量是针对个别命名空间的。
示例:
SET ^myglobal = "This is a global stored in the current namespace"
4. i%property实例变量
当你创建任何类的实例时
Object Script(五)
Property PropName as Classname(PARAM1=value,PARAM2=value) [ Keywords ] ;Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ];
Studio创建:
将下段代码填写入建好的类中:
ClassMethod FindPatient(id As %String) As HIS.Patient{ Set patient= ##class(HIS.Patien).%OpenId(id) Quit patient}
Terminal 调用:
set p = ##class(HIS.Patient).FindPatient(1)
传入参数的类型分为普通参数,输出型参数和返回参数:
普通参数 (传值参数):
Method Calculate(count As %Integer, name, state As %String = "CA") {…}
输出型参数(引用) :
Method Swap(ByRef x As %Integer, ByRef y As %Integer) { Set temp = x Set x = y返回日期表达式的年份的日期函数。
YEAR(date-expression)
{fn YEAR(date-expression)}
date-expression - 计算结果为 日期整数、ODBC 日期字符串或时间戳的表达式。此表达式可以是列名、另一个标量函数的结果或日期或时间戳字面量。YEAR 将日期整数($HOROLOG 日期)、ODBC 格式日期字符串或时间戳作为输入。 YEAR 以整数形式返回相应的年份。
日期表达式时间戳可以是数据类型 %Library.PosixTime(编码的 64 位有符号整数),也可以是数据类型 %Library.TimeStamp (yyyy-mm-dd hh:mm:ss.fff)。
年份 (yyyy) 部分应该是 0001 到 9999 范围内的四位整数。输入时前导零是可选的。前导零在输出上被抑制。两位数的年份不会扩展到四位数。
date-expression 的日期部分经过验证,并且必须包含 1 到 12 范围内的月份以及指定月份和年份的有效日期值。否则,将生成 SQLCODE -400 错误 <ILLEGAL VALUE>。
如果日期表达式的时间部分存在,则对其进行验证,但可以省略。
注意:为了与 内部日期表示兼容,强烈建议将所有年份值表示为 0001 到 9999 范围内的四位整数。
TO_DAT
InterSystems很高兴地宣布,InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect的2022.1版本现在已经发布(GA)。
InterSystems IRIS 数据平台 2022.1 扩大了包括以下新的和更新的操作系统的生产环境支持::
我们也很高兴地宣布我们同时支持用于开发环境的MacOS 12 (Monterey)的苹果 M1 和 Intel 芯片集。
格式化多个 XML 标记以包含表达式值的函数。
XMLFOREST(expression [AS tag][,expression [AS tag]])
expression - 任何有效的表达式。通常是包含要标记的数据值的列的名称。当指定为逗号分隔列表时,列表中的每个表达式都将包含在其自己的 XML 标记标记中。AS tag - 可选 — XML 标记标记的名称。如果指定了标签,则 AS 关键字是必需的。保留标签中字母的大小写。
用双引号括起来的标签是可选的。如果省略双引号,标签必须遵循 XML 命名标准。用双引号括起来的标签消除了这些命名限制。XMLFOREST 对有效的标签名称实施 XML 命名标准。它不能包含任何字符!"#$%&'()*+,/;<=>?@[\]^``{|}~,也不能包含空格字符,并且不能以 "-", ".", 或数字。
如果指定不带 AS 标记子句的表达式,则标记值是表达式列的名称(大写字母):<HOME_CITY>Chicago</HOME_CITY>。
XMLFOREST 函数返回用其自己的 XML 标记开始标记和结束标记标记的每个表达式的值,如 tag 中指定的那样。例如,XMLFOREST(Home_City AS City,Home_State AS State) 返回如下值:<City>Chi
IRIS Interoperability互操作性/HealthConnect(前身是Ensemble)有许多内置的适配器。但是没有一个接收邮件的服务或适配器。我洗的了一个电子邮件服务,通过SMTP接收邮件,这些邮件可以被传递到电子邮件操作。
现在我想对一个使用电子邮件操作向外部邮件服务器发送邮件的Production进行负载测试。邮件服务器团队不希望我向他们发送成千上万的信息。
我创建了iris-mail应用程序来替代邮件服务器。我更新了电子邮件操作中的服务器和端口设置。外发的邮件被发送到替代的邮件服务器,我能够计算出iris-mail中收到的邮件数量,并将其与邮件操作发送的邮件数量进行比较。
应用程序的源代码:https://openexchange.intersystems.com/package/iris-mail
一种格式化 XML 标记标记以包含一个或多个表达式值的函数。
XMLELEMENT([NAME] tag,expression[,expression])
XMLELEMENT([NAME] tag,XMLATTRIBUTES(expression [AS alias]),expression[,expression])
NAME tag - XML标记的名称。NAME关键字是可选的。该参数有三种语法形式: NAME "tag", "tag"和NAME。前两者在功能上是相同的。如果指定,标记必须用双引号括起来。标签中的字母大小写保持不变。XMLELEMENT不执行标记值的验证。然而,XML标准要求有效的标记名不能包含任何字符 !"#$%&'()*+,/;<=>?@[\]^``{|}~,并且不能以"-", "."或数字开头。
如果指定没有标记值的 NAME 关键字, 将提供默认标记值:<Name> ... </Name>。 NAME 关键字不区分大小写;结果标签初始大写。
expression - 任何有效的表达式。通常是包含要标记的数据值的列的名称。可以指定以逗号分隔的列列表或其他表达式,所有这些都将包含在同一标记中。第一个以逗号分隔的元素可以是 XMLATTRIBUTES 函数。只能指定一个 XMLATTRIBUTES 元素。糖尿病可以从医学界熟知的一些参数中发现。这样,为了帮助医学界和计算机软件系统,特别是人工智能软件,美国国家糖尿病和消化道及肾脏疾病研究所发布了一个非常有用的数据集,用于训练糖尿病检测/预测的机器学习算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/mathchi/diabetes-data-set。
该糖尿病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/mathchi/diabetes-data-set):
InterSystems Production 监控是管理门户中的一个页面,用于显示当前运行的Production监控信息。我喜欢这个页面的样子,但这并不适合所有人。
2022年5月13日,我在开发者社区上看到这个帖子。
https://community.intersystems.com/post/creating-custom-monitoring-page
我同意马克的观点,Production监控很复杂。我想创建一个更漂亮干净的监控页面。
我开始着手制作一个利用类方法提供Production数据的 CSP(Cache Server Page)页面。
我与马克分享了我的第一次尝试。他根据自己的想法定制了这个页面。我喜欢他对页面的布局,使其在视觉上更有吸引力。我把他的设计整合到我的应用程序Production监控中。
我看到马克对业务服务的显示进行了过滤,只显示需要注意的服务。他在页面的底部添加了服务器的名称和它的镜像状态。
你可以在Open Exchange和当前的竞赛中找到我的Production监控器的应用。
https://openexchange.intersystems.com/package/production-monitor

大家好!
在这里跟大家分享一下我在大奖赛上的项目 :)
FHIR病人查看器是一个建立在Vue.js上的单页、反应式渲染工具,它以对人友好的方式显示从对InterSystems FHIR服务器的/Patient/{id}/$everything调用返回的数据。在自述文件中,包括3个主要内容:
谢谢大家! 本次大赛的参赛作品质量很好!
Dan
注:IRIS函数。
连接 XML 元素的函数。
XMLCONCAT(XmlElement1,XmlElement2[,...])
XmlElement - XMLELEMENT 函数。指定两个或多个要连接的 XmlElement。XMLCONCAT 函数将来自多个 XMLELEMENT 函数的值作为单个字符串返回。 XMLCONCAT 可用于引用表或视图的 SELECT 查询或子查询。 XMLCONCAT 可以与普通字段值一起出现在 SELECT 列表中。
以下查询连接来自两个 XMLELEMENT 函数的值:
SELECT Name,XMLCONCAT(XMLELEMENT("Para",Name),
XMLELEMENT("Para",Home_City)) AS ExportString
FROM Sample.Person
ExportString
<Para>Emerson,Molly N.</Para><Para>Boston</Para>
以下查询将 XMLCONCAT 嵌套在 XMLELEMENT 函数中:
SELECT XMLELEMENT("Item",Name,
XMLCONCAT(一个日期函数,它将一年中的第几周作为日期表达式的整数返回。
{fn WEEK(date-expression)}
date-expression - 一个表达式,它是列的名称、另一个标量函数的结果,或者是日期或时间戳文字。WEEK 接受一个日期表达式,并返回该日期从年初开始的周数。
默认情况下,使用 $HOROLOG 日期(从 1840 年 12 月 31 日开始的正整数或负整数天数)计算周数。因此,周数是逐年计算的,因此第 1 周是完成从上一年最后一周开始的 7 天期间的天数。一周总是从星期日开始;因此,日历年的第一个星期日标志着从第 1 周到第 2 周的变化。如果一年中的第一个星期日是 1 月 1 日,则该星期日是第 1 周;如果一年中的第一个星期日晚于 1 月 1 日,则该星期日是第 2 周的第一天。因此,第 1 周的长度通常少于 7 天。可以使用 DAYOFWEEK 函数确定星期几。一年中的总周数通常为 53,闰年可能为 54。
IRIS 还支持确定一年中星期的 ISO 8601 标准。该标准主要用于欧洲国家。当配置为 ISO 8601 时,WEEK 从星期一开始计算星期,并将星期分配给包含该星期星期四的年份。例如,2004 年的第 1 周从 2003 年 12 月 29 日星期一到 2004 年 1 月 4
我的团队在在红帽OpenShift容器平台上运行IRIS互操作性解决方案。我想在数据被存储在Mirror的数据pods中的情况下,测试运行中的webgateway pods和计算节点 pods能处理多少消息。
为了增加测试难度,我部署了多个feeder容器,并在每个feeder上安排了任务,以在同一时间发送大量的消息。为了进入下一阶段的测试,我希望有多种类型的测试文件可以按需使用。我创建了test-data应用程序,能够请求生成大量的多种类型的文件。
我早期的一些测试依赖于复制一个样本文件和处理它。这在一次只复制一份的情况下效果不错。为了获得同一样本文件的许多副本,MakeFile函数获取一个样本文件、保存其副本、并以唯一的时间戳进行重命名。MakeFiles函数有一个参数,用于确定要制作的文件数量。
我找到了一个样本文件,它的输入和输出都是带分隔符和固定符的。我把它包含在我的应用程序中,并添加了一个转换来操作测试数据文件。在这种情况下,我把测试文件中的识别ID号替换成在一个类方法中生成的识别ID号,并且是随着文件而递增的。
我想在处理后审查测试文件中的数据,我喜欢看到一系列有顺序的数字,而不是一系列随机数字。
具体代码下载:https://openexchange.intersystems.com/package/test-data
你好,我很高兴地宣布向OpenExchange和目前的比赛提交的一个作品,即FHIR匿名化代理。FHIR匿名化代理为任何现有的FHIR服务器增加了一个透明的匿名化层,使客户能够在FHIR服务器上进行查询--其中可能包含个人识别信息--并收到一个即时的匿名化数据版本。
代理机制是通过互操作性Production、BPLs和DTLs以及FHIR互操作性适配器在IRIS for Health平台上实现的。匿名化包括所有身份ID和个人数据,并可通过DTLs进行配置。
OpenExchange的演示应用程序带有一个内置的FHIR endpoint,并以会填充一些示例数据。试一下,或者将你自己的FHIR服务器配置为代理目标亲自测试一下 ![]()
北京协和医院现公开招聘信息类技术岗位。有关事项公告如下:
岗位1:运维工程师
任职要求:
1.年龄30岁以下,本科及以上学历,计算机相关专业;
2.熟悉计算机软硬件技术,熟练排除各种软硬件的故障;有基本的网络知识,了解DNS、DHCP原理,熟练使用Ping、tracert等简单命令;
3.有2年以上桌面运维工作经验者优先。
岗位2:数据库管理员
任职要求:
1. 本科及以上学历,计算机相关专业;
2. 精通InterSystems Caché数据库,精通MySQL,SQL Server,熟悉Oracle,精通SQL脚本编写;有丰富数据库管理、运维调优经验;
3. 5年以上数据库运维管理经验;
4. 有医疗行业经验优先。
岗位3:开发工程师
任职要求:
1. 本科及以上学历,计算机及相关专业,有2年及以上JAVA WEB软件实际开发工作经验,有JVM调优经验者优先;
2. 熟悉SSM和SSH框架;有SpringBoot或者SpringCloud实际开发经验;
3. 熟悉html5,css,js 等前端开发技术;对jquery、vue等相关技术熟悉;熟悉websocket等相关技术;
4. 熟练使用MySQL,SQL Server,熟悉Oracle,有一定的SQL优化经验;
5. 熟练使用各种集成开发环境,Eclipse,Idea,SVN,GIT等,熟悉Linux操作系统。
招聘程序
(一)个人应聘
2022年6月27日24点
返回当前用户的用户名的函数。
USER
{fn USER}
{fn USER()}
USER 不接受任何参数并返回当前用户的用户名(也称为授权 ID)。通用函数不允许括号; ODBC 标量函数可以指定或省略空括号。
用户名是使用 CREATE USER 命令定义的。
USER 的典型用途是在 SELECT 语句选择列表或查询的 WHERE 子句中。在设计报告时,USER 可用于打印正在为其生成报告的当前用户。
以下示例返回当前用户名:
SELECT USER AS CurrentUser
yx
以下示例选择姓氏 ($PIECE(Name,',',1) 或名字(没有中间首字母)与当前用户名匹配的那些记录:
SELECT Name FROM Sample.Person
WHERE %SQLUPPER(USER)=%SQLUPPER($PIECE(Name,',',1))
OR %SQLUPPER(USER)=%SQLUPPER($PIECE($PIECE(Name,',',2),' ',1))
将字符串表达式中的所有小写字母转换为大写字母的大小写转换函数。
UPPER(expression)
UPPER expression
expression - 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。UPPER 函数将所有字母字符转换为大写字母。这是 LOWER 函数的反函数。 UPPER 保留不变的数字、标点符号和前导或尾随空格。
UPPER 不强制将数字解释为字符串。 SQL 从数字中删除前导零和尾随零。指定为字符串的数字保留前导零和尾随零。
也可以使用 UPPER() 方法调用从 ObjectScript 调用此函数:
$SYSTEM.SQL.Functions.UPPER(expression)
UPPER 是字母大小写转换的标准函数,而不是排序规则。对于大写排序规则,使用 %SQLUPPER,它提供了数字、NULL 值和空字符串的高级排序规则。
以下示例返回所有名称,选择那些名称的大写形式以“JO”开头的名称:
SELECT Name
FROM Sample.Person
WHERE UPPER(Name) %STARTSWITH UPPER('JO')
以下示例以大写形式返回所有名称,选择名称以“JO”开头的名称:
SELECT注:此函数IRIS可用,Cache不可用。
将日期表达式转换为 UNIX 时间戳的日期/时间函数。
UNIX_TIMESTAMP([date-expression])
date-expression - 可选 — 作为列名称、另一个标量函数的结果或日期或时间戳文字的表达式。 UNIX_TIMESTAMP 不会从一个时区转换到另一个时区。如果省略 date-expression,则默认为当前 UTC 时间戳。UNIX_TIMESTAMP 返回一个 UNIX® 时间戳,即自 '1970-01-01 00:00:00'以来的秒数(和小数秒)。
如果不指定 date-expression,则 date-expression 默认为当前 UTC 时间戳。因此,假设系统范围的默认精度为 3,UNIX_TIMESTAMP() 等效于 UNIX_TIMESTAMP(GETUTCDATE(3))。
如果指定 date-expression,UNIX_TIMESTAMP 会将指定的 date-expression 值转换为 UNIX 时间戳,计算该时间戳的秒数。 UNIX_TIMESTAMP 可以返回正数或负数秒数。
UNIX_TIMESTAMP 将其值作为数据类型 %Library.Numeric 返回。它可以返回小数秒的精度。如果不指定 d
将字符串中的所有小写字母转换为大写字母的大小写转换函数。
UCASE(string-expression)
{fn UCASE(string-expression)}
string-expression - 要将其字符转换为大写的字符串。表达式可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。UCASE 将小写字母转换为大写以进行显示。它对非字母字符没有影响;它保留不变的数字、标点符号和前导或尾随空格。
请注意,UCASE 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。
UCASE 不强制将数字解释为字符串。 SQL 从数字中删除前导零和尾随零。指定为字符串的数字保留前导零和尾随零。
UCASE 不影响排序规则。 %SQLUPPER 函数是 SQL 中为不区分大小写的排序规则转换数据值的首选方法。
也可以使用 UPPER() 方法调用从 ObjectScript 调用此函数:
$SYSTEM.SQL.UPPER(expression)
以下示例以大写字母返回每个人的姓名:
SELECT Name,{fn UCASE(Name)} AS CapName
FROM Sample.Person
UCASE 也适用于 Unicode(非 ASCI
Hi,大家好!
您曾经实施过DICOM集成吗?也许您已经百度了一些样例,甚至是模拟器。希望本文的例子能给您带来帮助。
DICOM 是一个广泛用于医疗诊断影像的消息标准。您可以使用IRIS For Health或者Health Connect在互操作性Production中使用DICOM标准,在这里您可以找到文档.
在很多情况下,当您开发一个DICOM集成时,您可以运行一个模拟器来扮演一些外部系统(如PACS),可以在连接到一个真正的系统之前充分测试您想要实现的流程,这一点真的很有用。
在这里您可以找到一个使用IRIS For Health的DICOM整合例子,还有一个叫做dcm4che的模拟器
在这个例子里, 实现了两个不同的场景:

查询流程:

检索流程:

欢迎多提宝贵意见,谢谢!:)
#Open Exchange
您可能已经看到邀请分享您的 Open Exchange 应用程序的演示:Share a Demo of Your Open Exchange Application
它背后的服务——InterSystems Online Demo Server (ODS)——这不是什么新事物
作为奖励积分,我在 21 年 3 月的 InterSystems 开发者工具大赛:InterSystems Developer Tools Contest 中第一次看到它。
在后来的比赛中成为一个固定的奖励项目。实际是#24。
到今天,我们已经看到 OEX 中列出了 80 个可在 ODS 上使用的软件包:80 packages listed in OEX as available on ODS
对我来说,开发人员的优势是显而易见的:
让我们假设我们已经将一个数据源连接到Adaptive Analytics,创建了一个项目并在那里添加了表。
现在我们来准备Adaptive Analytics的工作。首先,我们需要从表中选择数据,使其可用于未来的报告。要做到这一点,我们需要从表的列中创建维度。创建维度通常是为了将我们的数据分解成不同的类别,例如用户住在哪个城市,或者购买是在哪个月进行的。然而,没有什么可以阻止我们从数字数据中创建维度,这样我们就可以在Intersystems Reports Designer中对它们应用函数。
创建维度的工具位于界面的右侧,如下图所示。要创建一个新的维度,右击位于 "过滤器 "(Filter)行右侧的汉堡包按钮,选择 "创建维度 "(Create Dimension),如图所示。
.png)
将出现以下窗口:
在创建了一个维度后,你可以使其具有层次性。要做到这一点,在左边表格的尺寸上双击鼠标左键,进入层次结构编辑器。
通过点击层次结构旁边的三个点,我们可以在层次结构中创建一个新的维度。在菜单中,维度可以在层次结构中向上/向下移动。由于层次结构的存在,我们可以制作不同层次的数据细节。例如,我们可以指定有多少人从国家、地区、城市访问过该网站。
你可以使用维度来创建表之间的关系。要做到这一点,你需要使用鼠标左键拖动表的所需字段,并将其放到所需的高亮维度中。链接创建窗口将出现。点击保存,我们的连接就准备好了。
除
$TSQL_NEWID()
$TSQL_NEWID 返回一个全局唯一 ID (GUID)。 GUID 用于在偶尔连接的系统上同步数据库。 GUID 是一个 36 个字符的字符串,由 32 个十六进制数字组成,由连字符分成五组。它的数据类型是 %Library.UniqueIdentifier。
在 SQL 中提供了 $TSQL_NEWID 以支持Transact-SQL (TSQL)。对应的 TSQL 函数是 NEWID。
$TSQL_NEWID 函数不接受任何参数。请注意,参数括号是必需的。
%Library.GUID 抽象类提供对全局唯一 ID 的支持,包括 AssignGUID() 方法,该方法可用于为类分配全局唯一 ID。要生成 GUID 值,请使用 %SYSTEM.Util.CreateGUID() 方法。
以下示例返回一个 GUID:
SELECT $TSQL_NEWID()
E8B3E0AB-5F5B-4E7F-B59F-166F5A56E055
同事们,大家好
在这篇文章中,我将告诉你我们如何将报告生成时间从28分钟减少到1分钟。让我告诉你我们是如何实现这一目标的
我希望,如果有必要,你将能够为自己重现同样的结果。这篇文章里有一些有用的链接,所以要读到最后。
让我们开始吧。
我们使用Adaptive Analytics和InterSystems Reports Server为一家公司做报告。以前,这个报告是以DeepSee的屏幕截图形式生成的。总的来说,这并不坏,但它花费了大量的时间,而且看起来不是很可读。该报告本身由12页组成,为PDF格式。
一般来说,数据不是太大,不会使报告的生成花费很多时间
然而,在撰写本文时,有一个表包含11,330,263行。不是那么关键,但它造成了延迟。即使是计算行数的查询也需要近30秒
最初,系统的交互方案是这样的:
Atscale创建了自己的数据缓存,这导致了性能的提高。
Logi使用自己的数据缓存,这稍微加快了报告的开发速度。
但总的来说,这仍然导致了报告在28分钟内形成的事实。
鉴于报告只有12页,这个速度还是很慢的。
我们甚至故意添加了新的标签,并将报告中的小部件复制到那里,以便在开发或调试时不需要生成整个报告。也许这就是在Logi上开发时的一种日常技巧,或者说是一种正常的开发方法。总的来说,我们在工作中使用了它
在报告生成时,有数百个请求从Logi到Atscale,还有一些请求从Astcale到
在使用xDBC连接到字符集为US7ASCII的Oracle数据库时,大家可能遇到过中文的乱码问题,尤其是使用Oracle自己的xDBC驱动的时候。
字符集为US7ASCII的Oracle数据库虽然可以保存中文数据,但给客户端带来了很多麻烦,需要对获取和提交的数据进行转码。
在Ensemble/Health Connect/InterSystems IRIS 中使用SQL适配器连接到这样的Oracle数据库时,可以使用$ZCVT函数进行转码。
1. $ZCVT函数
$ZCVT函数是广泛使用的字符串转换函数,可以做大小写转换、编码转换、URL 和 URI 转换等。我们用其编码转换能力来解决字符集转码问题。
2. 获取的SQL结果集数据有中文时
这时,Oracle的驱动返回的中文数据通常是GB码,而不是Unicode或UTF码。可以通过$ZCVT函数对GB码的数据进行转码,转换为Unicode:
Set tCorrectData = $ZCVT(tOriginalData,"I","GB18030")其中$ZCVT函数的第一个参数tOriginalData是获取到到结果集字段值;第二个参数“I”说明tOriginalData是输入字符串;第三个参数“GB18030”是说明输入字符串的字符集编码是GB18030。
上面的代码会将tOriginalValue按GB18030编码转换为Unicode编码,
[toc]
将字符串截断为指定长度并应用 EXACT 排序规则的排序规则函数。
%TRUNCATE(expression[,length])
expression - 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR2)。表达式可以是子查询。length - 可选 — 截断长度,指定为整数。返回表达式的初始长度字符。如果省略长度,则 %TRUNCATE 排序规则与 %EXACT 排序规则相同。可以用双括号将长度括起来以抑制文字替换:((length))。%TRUNCATE 将表达式截断为指定的长度,然后在 EXACT 排序规则序列中返回它。
EXACT 排序规则首先按数字顺序排列纯数值(x=+x 的值),然后是字符串排序规则序列中的所有其他字符。 EXACT 字符串整理顺序与 ANSI 标准 ASCII 整理顺序相同:在大写字母字符之前整理数字,在小写字母字符之前整理大写字母字符。标点符号出现在序列中的多个位置。
%TRUNCATE 通过 NULL 不变。
%TRUNCATE 是一个 SQL 扩展,用于 SQL 查找查询。
也可以使用 TRUNCATE() 方法调用从 ObjectScript 调用此函数:
DHC-APP> WRITE $SYSTEM.大家是不是经常遇到以下情况:
标量数值函数,按指定位数截断一个数。
{fn TRUNCATE(numeric-expr,scale)}
numeric-expr - 要截断的数字。数字或数字表达式。scale - 计算结果为一个整数的表达式,该整数指定要截断的位数,从小数点开始计算。可以是零、正整数或负整数。如果比例是小数,会将其舍入为最接近的整数。Truncate返回NUMERIC或DOUBLE数据类型。如果NUMERIC-EXPR的数据类型为DOUBLE,则TRUNCATE返回DOUBLE;否则返回NUMERIC。
TRUNCATE通过从小数点开始按小数位数截断NUMERIC-EXPR。它不对数字进行四舍五入,也不添加填充零。在截断操作之前,将删除前导零和尾随零。
Scale为零,则该数字将被截断为整数。换句话说,在小数点右侧的零位数处执行截断;所有小数位和小数点本身都被截断。NUMERIC-EXPR为零(但表示为00.00、-0等)。TRUNCATE返回0(零),不带小数位数,无论小数位数是多少。NUMERIC-EXPR或SC字符串函数,它返回删除了指定的前导和/或尾随字符的字符串。
TRIM([end_keyword] [characters FROM] string-expression)
end_keyword - 可选 — 一个关键字,指定要剥离的字符串表达式的哪一端。可用值为 LEADING、TRAILING 或 BOTH。默认为两者。characters - 可选 — 一个字符串表达式,指定要从字符串表达式中删除的字符。指定字符的每个实例都从指定的末端被剥离,直到遇到此处未指定的字符。因此TRIM(BOTH 'ab' FROM 'bbbaacaaa') 返回 ‘c’。在此示例中,BOTH 关键字是可选的。如果未指定字符,TRIM 会去除空格。如果指定了字符,则需要 FROM 关键字。如果指定了 end_keyword 而未指定字符,则允许使用 FROM 关键字(但不是必需的)。如果没有指定这些参数,则不允许使用 FROM 关键字。string-expression - 要剥离的字符串表达式。字符串表达式可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR2)。如果省略了字符和 end_keyword,则省略 FROM 关键字。TRIM 从提供的值的开头和/或结尾去除指定的字符。默