我正在使用sybase数据库查询每日交易报告.我的脚本中有子查询.
在这里:
SELECT orders.accountid ,items.x,etc
(SELECT charges.mistotal FROM charges where items.id = charges.id)
FROM items,orders
WHERE date = '2008-10-02'
Run Code Online (Sandbox Code Playgroud)
在这里,我收到错误消息:
子查询不能返回多个值
我的价值是7.50,25.00
我想要返回25.00,但是当我使用时
(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id)
Run Code Online (Sandbox Code Playgroud)
我的结果是7.50,但我想返回25.00
有没有人有更好的建议?
我们有一个查询,要根据id字段(主键)从表中删除一些行.这是一个非常简单的查询:
delete all from OUR_TABLE where ID in (123, 345, ...)
Run Code Online (Sandbox Code Playgroud)
问题是没有.id可能很大(例如70k),因此查询需要很长时间.有没有办法优化这个?(我们正在使用sybase - 如果这很重要).
sql database sybase query-optimization database-optimization
有人知道如何在Sybase中打开控制台输出.通常的声明 print 'Hello',对我来说不起作用,只是说命令执行成功而不打印日志语句.
Eric Johnson在2010年8月提出以下问题."Sybase中神秘的'timestamp'数据类型是什么?
我试图回答上述帖子,但由于原帖的年龄,本网站不接受新答复.由于主题仍然是SAP/Sybase ASE专业人员的常见问题解答,因此我决定重新发布上述原始问题,并希望在下面给出一些明确的答案.
回答问题1:'时间戳到底是什么?'
•Sybase ASE数据库的时间戳集中保存在该数据库的内部内存表"dbtable"中 - 此表是在数据库联机时构建的.您可以通过选择@@ dbts来查询当前的数据库时间戳 - 请注意,此varbinary(8)'数据库'时间戳值取决于平台,即受Big/Small字节序的影响.
•每个用户表可以有一个时间戳列,用于保存给定行的INSERT/UPDATE的"数据库"时间戳值.成功完成TSQL DML命令后,所有'Table'时间戳列值都由ASE自动维护(就像标识列一样).但是,与"数据库"时间戳不同,"表"时间戳值与平台无关,因为无论O/S平台的字节顺序如何,它们始终以Big-endian字节顺序保留(有关详细信息,请参阅下面的详细信息).
回答问题2:"它与时间或日期有任何关系吗?"
不,"数据库"时间戳和页面"本地"时间戳中的值不反映实际日期/时间.
回答Q#3:'我可以将它转换为日期时间吗?'
不,您无法将其页面的"数据库"时间戳或"本地"时间戳转换为日期/时间值.
回答问题4:'如果不是时间或日期,你用它做什么?'
•每当修改或创建数据库中的页面时,"数据库"时间戳将加1,而受影响页面的"本地"时间戳(在其页眉中)随后与该时间点的"数据库"时间戳同步.
•与当前时间的"数据库"时间戳进行比较时,数据库页面的"本地"时间戳反映了该页面上次更新或首次创建的相对年龄; 因此,ASE可以告知数据库中所有页面的更新/创建的时间顺序.
•应用程序可以以与标识列类似的方式使用"表"时间戳列,以查找最近或最近最少插入/更新的行,而不管行的键值如何.
进一步的信息,警告和警告: -
(1)"数据库"和"本地"时间戳存储在3个部分中,并且与OS平台字节顺序相关.例如0xHHHH 0000 LLLLLLLL
(2)用户'Table'时间戳也存储在3个部分中,但始终处于Big-endian方向.例如0x0000 HHHH LLLLLLLL
(3)数据库时间戳保存在给定数据库的内存系统表dbtable中(在数据库联机时创建).
仅供参考 - 上述答案,提示和提示是真实准确的,因为我在Sybase工作,现在工作的SAP拥有产品ASE.
我有一个包含一堆日期的表(选项成熟日期准确无误).我需要查询此数据库以查找存储在表中的特定周的最后一天.
所有我将被要求查询此表是年,月和具体的一周.基于此,我需要找到存储在与此匹配的表中的日期.
我创建了以下查询以查找此特定日期2013年3月28日
SELECT M_SETNAME, M_LABEL, M_MAT FROM OM_MAT_DBF
WHERE M_SETNAME = 'IMM_OSET '
AND MONTH(M_MAT) = 3
AND YEAR(M_MAT) = 2013
AND ((DATEPART(day,M_MAT)-1)/7 + 1) = 5
Run Code Online (Sandbox Code Playgroud)
你们有没有想过如何改变最后一个条件,以便3月28日被认为是本月的第5周,而不是目前正在进行的第4周.
我在sybase表上创建了一个功能索引.
create index acadress_codpost_lower on acadress(LOWER(l5_codpost))
Run Code Online (Sandbox Code Playgroud)
然后我运行一个使用索引的复杂查询.没有索引需要17.086秒.索引需要0.076秒.
我从两个不同的SQL客户端以及开发和预生成的Sybase服务器上运行它.在所有情况下,我都看到了索引的加速度.
但是当我们从Java运行一个相同的查询时(我知道它是相同的,因为我已经记录了生成的SQL并直接在SQL客户端中使用它),那么性能与我们添加索引之前完全相同.
从ACE和SQuirreL运行而不是从Java运行时,相同的SQL查询可能有什么原因可以使用索引?
我的第一个想法是,Sybase可能正在缓存Prepared Statements的执行计划,而不是使用索引.我们已经尝试多次重启Java服务器(其他服务使用Sybase服务器因此更难反弹)并且没有任何区别.
另一种可能性是我们使用的是非常旧版本的Sybase驱动程序:
jConnect (TM) for JDBC(TM)/7.00(Build 26502)/P/EBF17993/JDK16/Thu Jun 3 3:09:09 2010
Run Code Online (Sandbox Code Playgroud)
此版本的JConnect可能不支持功能索引吗?
有谁知道这些理论中的任何一个是否正确,或者是否还有其他我错过的东西?
我知道Android和Java中的正常解析.
但是,这里的情况略有不同.
如果设置了默认的String(300),我可以获取JSON字符串,并将PAGESIZE设置为2096,我可以在Sybase中生成代码.
但是如果我想获得超过300个字符或300000个字符的数据,那么MBO命中可以得到它但不能通过Android中的代码获得.
在android代码中,我得到TRUNCATED数据+我点击同步后获取的一些JSON数据
所以我需要知道如何通过Android代码获取大型JSON字符串
.
请注意:这个问题适用于Sybase Android应用程序开发
类似的问题已在SAP论坛上发布,但尚未回答 http://scn.sap.com/thread/3738150
当尝试从 Sybase 到 Microsoft SQL 执行 OPENQUERY 时,我遇到错误:
通过 OPENQUERY 和 OPENROWSET 获取的结果集中不允许有重复的列名。列名“PatientID”重复。
我构建的查询基于相似的missionID 和病人ID 连接了2 个表。
例如:
PatID AdmID Loc PatID AdmID Doctor
1 5 NC 1 5 Smith
2 7 SC 2 7 Johnson
Run Code Online (Sandbox Code Playgroud)
当然,真正的查询包含的信息远不止这些。
有没有一种好方法可以重命名或删除 AdmID 和 PatID 列之一?
我尝试过:
SELECT * INTO #tempTable
ALTER #tempTable
DROP COLUMN PatID
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 PatID 不明确。
我也尝试过:
SELECT firstTable.PatID as 'pID', * FROM...
Run Code Online (Sandbox Code Playgroud)
这也行不通。
我有一个表(Sybase IQ),其中包含不同客户的数据及其在某个时间点的客户价值:
老客户价值表:
customer_id | load_date | customer_value
5 | 2016-01-01 | Basic
5 | 2016-04-01 | Premium
5 | 2016-08-01 | Gold
6 | 2016-01-01 | Basic
6 | 2016-04-01 | Premium
6 | 2016-08-01 | Gold
7 | 2016-01-01 | Basic
7 | 2016-04-01 | Premium
7 | 2016-08-01 | Gold
Run Code Online (Sandbox Code Playgroud)
要将此表与其他表连接起来,我必须知道特定时间范围内客户的有效 customer_value 是什么。所以我们的想法是改造上面的表并创建一个具有以下形式的新表:
要创建的新客户价值表
customer_id | date_valid_from | date_valid_to | customer_value
5 | 2016-01-01 | 2016-03-31 | Basic
5 | 2016-04-01 | 2016-08-24 | Premium
5 | …Run Code Online (Sandbox Code Playgroud) 我尝试使用DBI包连接到Sybase数据库,但查询不能正确返回希腊字符.
与SQL Server的连接相同.以下是dbConnect命令的示例:
library(odbc)
con <- dbConnect(odbc::odbc(), .connection_string = "Driver={SQL Server};server=ATLAS;database=master;trusted_connection=true")
Run Code Online (Sandbox Code Playgroud)
我使用RODBC(使用相同的系统DSN)时没有问题
表内容:
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=Greek_Greece.1253 LC_CTYPE=Greek_Greece.1253 LC_MONETARY=Greek_Greece.1253 LC_NUMERIC=C
[5] LC_TIME=Greek_Greece.1253
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] odbc_1.1.1
loaded via a namespace (and not attached):
[1] bit_1.1-12 compiler_3.4.1 hms_0.3 DBI_0.7 tools_3.4.1 tibble_1.3.4 yaml_2.1.14 Rcpp_0.12.12 bit64_0.9-7
[10] blob_1.1.0 …Run Code Online (Sandbox Code Playgroud)