我现在没有环境,所以以下想法得不到实际检验:
将你所说的字符串转变为“yyyy-mm-dd hh:mm:ss”这种结构的字符串,应该可以的,
select substring("13-12-2019 11:16:55", 7, 4) + "-" + substring("13-12-2019 11:16:55", 4, 2) + "-" + substring("13-12-2019 11:16:55", 1, 2) + " " + substring("13-12-2019 11:16:55", 12, 8)
这样就得到了“2019-12-13 11:16:55”,符合sybase的datetime的数据类型。
至于是insert还是update,看你具体的实施需要了,例如:
insert into 表1
select 字段1, ……, 字段N, substring(字段m, 7, 4) + "-" + substring(字段m, 4, 2) + "-" + substring(字段m, 1, 2) + " " + substring(字段m, 12, 8)
from 表2
where ……
两个数是在一行,还是一列,如果是一列max就行。
如果是一行,那么用case when。
假设两个字段,分别是time1和time2,那么呢可以用 case when time1>time2 then time1 else time2 end 再取一个别名就行了
存储过程的特点
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务 存储过程由SQL语句和流程控制语句组成 它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理 指示调用成功或失败;返回若干个参数值给调用过程或批处理 为调用者提供动态结果;在远程SQL Server中运行等
存储过程的性能特点如下:
·存储过程是预编译过的 这就意味着它与普通的SQL语句或批处理的SQL语句不同 当首次运行一个存储过程时 SQL Server的查询处理器对其进行分析 在排除了语法错误之后形成存储在系统中的可执行方案 由于查询处理的大部分工作已经完成 所以存储过程执行速度很快
·存储过程和待处理的数据都放在同一台运行SQL Server的计算机上 使用存储过程查询当地的数据 效率自然很高
·存储过程一般多由Client端通过存储过程的名字进行调用 即跨网传送的只是存储过程的名字及少量的参数(如果有的话) 而不是构成存储过程的许多SQL语句 因此可以减少网络传输量 加快系统响应速度
·存储过程还有着如同C语言子函数那样的被调用和返回值的方便特性
所以 存储过程大大增强了SQL语言的功能 效率和灵活性 掌握和应用好存储过程 对进一步发挥Sybase数据库系统的强大功能有着重要的意义
存储过程的语法规则
建立存储过程的语法规则为:
CREATE PROCedure[owner ]procedurename[;number] [[(]@parameter_name datatype[=default][OUTput] [ @parameter_name datatype[=default][OUTput]] [)]] [WITH REPILE] AS SQL_statements
使用存储过程的语法规则为:
[EXECute][@return status=] [[[server ]database ]owner ]procedurename[;number] [[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput] [ [@parameter_name=]value|[@parameter_name=]@variable[OUTput] ]] [WITH REPILE]
[page]下面简要介绍这两个命令的常用选项以及建立和使用存储过程的要点 关于选项的更为详细的说明请参考有关手册
·[[[server ]database ]owner ]procedure_name:存储过程的名字
·@parameter_name datatype[=default][OUTput]:形式参数(形参)的名称 类型 df ault是赋予的缺省值(可选) OUTput指定本参数为输出参数(可选) 形参是存储过程中的自变量 可以有多个 名字必须以@打头 最长 个字符
·SQL_statements:定义存储过程功能的SQL语句
·@return_status:接受存储过程返回状态值的变量
·[@parameter_name=]value:实际参数(实参) @parameter_name为实参的名称(可选) 如果某个实参以@parameter_name=value提供 那么随后的实参也都要采用这一形式提供
·[@parameter_name=]@varialbe[OUTput]:将变量@varialbe中的值作为实参传递给形参@parameter_name(可选) 如果变量@varialbe是用来接受返回的参数值 则选项OUTput不可缺少
存储过程的建立和使用 我们将通过几个例子进行介绍
假设有一个用下述语句生成的技能工资表RS LS GZ JiNeng:
create table RS_LS_GZ_JiNeng /技能工资表/
(GeRen_id char( ) /个人代码 /
RiQi alldatetime /执行日期 /
YuanYin_id char( ) null /变动原因代码 /
JinE allmoney) /技能工资金额 /
该表存储著某单位员工多年来技能工资的历史档案
例 如果要查询全体员工的技能工资变动历史 则可先建立一个存储过程p RsGz JiNeg All:
create procedure p_RsGz_JiNeng_All as select from RS_LS_GZ_JiNeng order by GeRenid RiQi
然后用批处理语句调用存储过程p_RsGz_JiNeng_All进行查询:
execute p_RsGz_JiNeng_All
本例只显示查询到的数据 无输入 输出参量 是最简单的一个存储过程
例 如果要查询某人技能工资的变动历史 可建立另一个存储过程p_RsGz_JiNeng:
create procedure p_RsGz_JiNeng @c_GeRenId char( ) as select from RS_LS_GZ_JiNeng where GeRen_id=@c_GeRenId order by RiQi
之后用批处理语句调用存储过程p_Rs_Gz_JiNeng进行查询:
declare @GeRenId char( )
select @GeRenId= /设要查询员工的个人代码为 /
execute p_RsGz_JeNeng @c_GeRenId=@GeRenId
存储过程p_RsGz_JiNeng中定义了一个形参@c_GeRenId 是字符型变量 在调用该过程的批处理中 既可以用具体的值也可以用变量作为实参 用变量作实参(如本例)时 必须用del are语句加以说明 值得注意的是 在批处理的调用过程语句中 @c_GeRenId=@GeRenId中的@ c_GeRenId是存储过程p_RsGz_JiNeng中的形参名 不是批处理中的变量 所以不能将它列入d eclare语句的变量单中
例 如果要计算当月工资 就必须从工资历史中查出员工距离当前最近的一次技能工资变动的结果:
create procedure p_RsGz_JiNeng_Slt (@c_GeRenId char( ) @ _JinE allmoney output) as select @ _JinE=JinE from RS_LS_GZ_JiNeng where RiQi=(select max(RiQi) from RS_LS_GZ_JiNeng
where GeRenid=@c GeRenId)/找出历史记录中距离当前最近的日期/
调用存储过程p_RsGz_JiNeng_Slt进行查询:
declare @GeRenId char( ) @JinE allmoney select @GeRenid= /设要查询员工的个人代码为 / select @JinE= execute p_RsGz_JiNeng_slt @c_GeRenId=@GeRenId @ _JinE=@ JinE output
这里 变量 @JinE用来存储过程形参@ _JinE传回的金额 在调用过程语句中 @ _JiE = @JinE output中的output不可省略 否则 变量@JinE将得不到形参传回的数值而始终为零(等于初值)
例 查到了个人代码为 员工的技能工资就显示其历史纪录 查不到则显示一条出错信息
create procedure p_RsGz_JiNeng_Rtn @c_GeRenId char( ) as declare @ErrCode allint select @ErrCode= if exists(select from RS LS GZ JiNeng where GeRenid=@c GeRenId) begin select from RS_LS_GZ_JiNeng whrer GeRen_id=@c_GeRenId order by RiQi return @ErrCodE end eslE begin select @ErrCode= return @ErrCodE end
调用存储过程p_RsGz_JiNeng_Rtn:
declare @GeRenId char( ) @RtnCode allint select @GeRenId= select @RtnCode= execute @RtnCode=p_RsGz_JiNeng_Rtn @c_GeRenId=@GeRenId if @RtnCode= print No this one!
存储过程p_RsGz_JiNeng_Rtn向调用者返回一个存储在变量@ErrCode里的值 这个值被称为状态值 它向调用者反映存储过程执行的成败状态 在本例中 如果查不到指定员工技能工资的任何记录时 就认为 查无此人 返回出错状态值 否则 返回成功状态值
调用过程的批处理语句使用变量@RtnCode存储返回的状态值 一旦检出存储过程p_RsG_ JiNeng_Rtn返回了错误标志(@RtnCode= ) 就显示一条信息 No this one! [page]
小结
上述四个例子简要介绍了存储过程常用的几种形式 从中我们已经可以领略到它的编程特色以及使用上的灵活性和方便性
lishixinzhi/Article/program/Oracle/201311/17494
有关更多信息,请参见表达式。
data_type目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。
lengthnchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。
style日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。
SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。
在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。
不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输入/输出
- 0 或 100 () 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yymmdd
3 103 英国/法国 dd/mm/yy
4 104 德国 ddmmyy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 () 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
可以参考:
Sybase ASE convert函数中的style日期时间样式
>
sybase ase中没有这种函数,只能通过其它方法实现
datediff(ss,sdate,edate) 返回两个日期之前的秒数
dateadd(ss,秒数值,sdate) 返回sdate增加秒数值後的日期
以上就是关于sybase 字符串转时间格式全部的内容,包括:sybase 字符串转时间格式、在sybase数据库中有没有,在两个日期类型的数据中取较晚的一个的函数、讲解Sybase存储过程的建立和使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)