标签: sybase

在SQL查询中是否有诸如SELECT LAST之类的东西?

我正在使用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

有没有人有更好的建议?

sql sybase

6
推荐指数
2
解决办法
3万
查看次数

提高Sql Delete的性能

我们有一个查询,要根据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

6
推荐指数
1
解决办法
2万
查看次数

Sybase - 为打印日志语句设置控制台输出

有人知道如何在Sybase中打开控制台输出.通常的声明 print 'Hello',对我来说不起作用,只是说命令执行成功而不打印日志语句.

sql printing console sybase output

6
推荐指数
1
解决办法
9861
查看次数

回答神秘的Sybase ASE'timestamp'数据类型问题

Eric Johnson在2010年8月提出以下问题."Sybase中神秘的'timestamp'数据类型是什么?

  1. 什么是时间戳?
  2. 它与时间或日期有任何关系吗?
  3. 我可以将其转换为日期时间吗?
  4. 如果不是时间或日期,你用它做什么?"

我试图回答上述帖子,但由于原帖的年龄,本网站不接受新答复.由于主题仍然是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字节高阶 - 0xHHHH
  • 2字节填充符 - 0x0000
  • 4字节低位 - 0xLLLLLLLL

(2)用户'Table'时间戳也存储在3个部分中,但始终处于Big-endian方向.例如0x0000 HHHH LLLLLLLL

  • 2字节填充符 - 0x0000
  • 2字节高阶 - 0xHHHH
  • 4字节低位 - 0xLLLLLLLL

(3)数据库时间戳保存在给定数据库的内存系统表dbtable中(在数据库联机时创建).

  • Note1 -'Table'时间戳列值与数据库表的数据和/或索引页中的其他列值一样,其中定义了timestamp列.
  • 注2 - 请注意,SELECT @@ dbts查询当前数据库的"数据库"时间戳将返回其十六进制表示形式,该表示形式受OS平台的Endianness的影响.
  • 注3 - 相反,通过DBCC dbtable(不推荐)查询"数据库"时间戳会返回其Big-endian十六进制表示,因此,它与平台无关.
  • 警告 - 当给定数据库的"数据库"时间戳接近其最大限制(即0xFFFF,0xFFFFFFFF)时,根据数据库中插入/更新操作的频率,可能需要十年或更长时间才能达到此点,ASE将抛出警告,不可能进一步插入/更新 - 唯一的选择是使用BCP从所有对象导出数据(加上存储过程通过sp_showtext),删除数据库,再次创建它(使用新的近似'数据库'时间戳)并导入数据(和存储过程).

仅供参考 - 上述答案,提示和提示是真实准确的,因为我在Sybase工作,现在工作的SAP拥有产品ASE.

database sybase timestamp ase

6
推荐指数
0
解决办法
2801
查看次数

找到一周的最后一天

我有一个包含一堆日期的表(选项成熟日期准确无误).我需要查询此数据库以查找存储在表中的特定周的最后一天.

所有我将被要求查询此表是年,月和具体的一周.基于此,我需要找到存储在与此匹配的表中的日期.

我创建了以下查询以查找此特定日期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周.

sql sybase sybase-ase

6
推荐指数
1
解决办法
394
查看次数

为什么Sybase不使用功能索引?

我在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可能不支持功能索引吗?

有谁知道这些理论中的任何一个是否正确,或者是否还有其他我错过的东西?

java sybase prepared-statement functional-index

6
推荐指数
1
解决办法
331
查看次数

如何在android Sybase Unwired Platform中获取大型JSON响应

我知道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

java sybase android json

6
推荐指数
1
解决办法
330
查看次数

如何删除/重命名 SQL 中的重复列(不是重复行)

当尝试从 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)

这也行不通。

sql sql-server sybase

6
推荐指数
1
解决办法
1万
查看次数

从一个日期列生成 valid_from 和 valid_to 日期

我有一个表(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)

sql sql-server sybase

6
推荐指数
1
解决办法
3966
查看次数

与SQL Server(和Sybase 12.5)的DBI连接不返回希腊字符

我尝试使用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)

sql-server sybase r rstudio

6
推荐指数
1
解决办法
428
查看次数