<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sybase数据库技术，数据库恢复专家 &#187; create function</title>
	<atom:link href="http://www.dbainfo.net/tag/create-function/feed" rel="self" type="application/rss+xml" />
	<link>https://www.dbainfo.net</link>
	<description>提供Sybase ASE及Sybase SQL Anywhere数据库修复服务，电话：13811580958(微信)，QQ：289965371！We have many years of experience in recovering data from damanged Sybase devices. Contact us by Phone: +86 13811580958 Wechat: 13811580958 Email: 289965371@qq.com</description>
	<lastBuildDate>Sat, 14 Jun 2025 16:28:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>IQ中得到字符串的十六进制形式</title>
		<link>https://www.dbainfo.net/iq-transfer-strings-to-hex.htm</link>
		<comments>https://www.dbainfo.net/iq-transfer-strings-to-hex.htm#comments</comments>
		<pubDate>Thu, 07 Jun 2012 14:38:26 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase IQ]]></category>
		<category><![CDATA[create function]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[inttohex]]></category>
		<category><![CDATA[IQ]]></category>
		<category><![CDATA[list]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=1916</guid>
		<description><![CDATA[Sybase IQ和ASE中都有函数ascii，返回字符串表达式中第一个字节的整数 ASCII 值！ 那么， 如何获得字符串的十六进制形式呢？ 比如：以GBK编码的三个汉字&#8220;数据库&#8221;的十六进制形式为：0xcafdbeddbfe2 可以验证一下： select char(hextoint(&#39;ca&#39;)) + char(hextoint(&#39;fd&#39;)) , char(hextoint(&#39;be&#39;)) + char(hextoint(&#39;dd&#39;)),char(hextoint(&#39;bf&#39;)) + char(hextoint(&#39;e2&#39;)) 本文提供两种方法，主要涉及到的函数有： substring,ascii,inttohex,right,list,string以及sa_rowgenerator系统过程。 第一种方法： 编写成自定义函数的形式 create function Hex(@str varchar(8192)) returns varchar(8192) --返回字符的十六进制形式 as begin &#160; declare @len int,@i int,@strhex varchar(16384) &#160; select @i=1,@len=len(@str),@strhex=&#39;&#39; &#160; while( @i&#60;=@len ) &#160; begin &#160;&#160;&#160; select @strhex=@strhex + right( inttohex( ascii( substring(@str,@i,1) ) [...]]]></description>
			<content:encoded><![CDATA[<p>Sybase IQ和ASE中都有函数ascii，返回字符串表达式中第一个字节的整数 ASCII 值！</p>
<p>那么， 如何获得字符串的十六进制形式呢？</p>
<p>比如：以GBK编码的三个汉字&ldquo;数据库&rdquo;的十六进制形式为：0xcafdbeddbfe2</p>
<p>可以验证一下： select char(hextoint(&#39;ca&#39;)) + char(hextoint(&#39;fd&#39;)) , char(hextoint(&#39;be&#39;)) + char(hextoint(&#39;dd&#39;)),char(hextoint(&#39;bf&#39;)) + char(hextoint(&#39;e2&#39;))</p>
<p>本文提供两种方法，主要涉及到的函数有： substring,ascii,inttohex,right,list,string以及sa_rowgenerator系统过程。<span id="more-1916"></span></p>
<p>第一种方法：</p>
<p>编写成自定义函数的形式</p>
<p>create function Hex(@str varchar(8192))<br />
	returns varchar(8192)<br />
	--返回字符的十六进制形式<br />
	as<br />
	begin<br />
	&nbsp; declare @len int,@i int,@strhex varchar(16384)<br />
	&nbsp; select @i=1,@len=len(@str),@strhex=&#39;&#39;<br />
	&nbsp; while( @i&lt;=@len )<br />
	&nbsp; begin<br />
	&nbsp;&nbsp;&nbsp; select @strhex=@strhex + right( inttohex( ascii( substring(@str,@i,1) ) ), 2 )<br />
	&nbsp;&nbsp;&nbsp; select @i=@i+1<br />
	&nbsp; end<br />
	&nbsp; select @strhex=&#39;0x&#39;+@strhex<br />
	&nbsp; return @strhex<br />
	end<br />
	go</p>
<p>第二种方法：</p>
<p>使用一条SQL语句就能够实现。主要依赖于sa_rowgenerator系统过程以及list函数。</p>
<p>sa_rowgenerator 返回包含指定起始值和结束值之间的行的结果集。<br />
	语法:sa_rowgenerator ( [ rstart [, rend [, rstep ] ] ])</p>
<blockquote>
<p>1&gt; select <span style="color:#f00;"><strong>row_num</strong></span> from <span style="color:#f00;"><strong>sa_rowgenerator</strong></span>(1,10,2)<br />
		2&gt; go<br />
		&nbsp;row_num&nbsp;&nbsp;&nbsp;&nbsp; <br />
		&nbsp;----------- <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9 </p>
<p>		(5 rows affected)</p>
<p>--得到系统表SYSTABLE的所有列名的列表，用逗号分隔。</p>
<p>1&gt; select <span style="font-size:14px;"><span style="color: rgb(255, 0, 0);"><strong>list</strong></span></span>(column_name,&#39;,&#39;) as column_list&nbsp; from syscolumn where table_id=1<br />
		2&gt; go<br />
		&nbsp;column_list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
		&nbsp;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <br />
		&nbsp;table_id,file_id,count,first_page,last_page,primary_root,creator,first_ext_page,last_ext_page,table_page_count,ext_page_count,table_name,table_type,view_def,remarks,replicate,existing_obj,remote_location,remote_objtype,srvid,server_type,primary_hash_limit,page_map_start,source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>		(1 row affected)</p>
</blockquote>
<p>下面的SQL直接返回&ldquo;数据库&rdquo;三个汉字的十六进制形式：</p>
<p><span style="color:#f00;"><span style="font-size: 14px;">select string(&#39;0x&#39;, list( right(inttohex(ascii(substring(&#39;数据库&#39;,row_num,1))),2) , &#39;&#39; ) ) from sa_rowgenerator(1,len(&#39;数据库&#39;))<br />
	</span></span></p>
<p>将&ldquo;数据库&rdquo;两次出现的位置替换成其它字符串，就能得到指定字符串的十六进制形式。</p>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/iq-transfer-strings-to-hex.htm">https://www.dbainfo.net/iq-transfer-strings-to-hex.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/iq-transfer-strings-to-hex.htm">IQ中得到字符串的十六进制形式</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2014-08-23 -- <a href="https://www.dbainfo.net/online-compress-iq-dumpfile-by-pipefile.htm" title="一种使用管道文件在线压缩IQ备份文件的方法">一种使用管道文件在线压缩IQ备份文件的方法</a> (0)</li><li>2012-03-07 -- <a href="https://www.dbainfo.net/sybase-ase12-5-4-client-tool-sybase-central-without-installation-version.htm" title="免安装（绿色版）的ASE客户端工具Sybase Centralv4.3">免安装（绿色版）的ASE客户端工具Sybase Centralv4.3</a> (12)</li><li>2011-09-20 -- <a href="https://www.dbainfo.net/sybase-iq-15-2-30-day-evaluation-edition.htm" title="Sybase IQ 15.2免费试用30天的体验版下载地址">Sybase IQ 15.2免费试用30天的体验版下载地址</a> (0)</li><li>2011-02-25 -- <a href="https://www.dbainfo.net/sybase-iq-dbms-gartner-report.htm" title="SYBASE 在2011年数据仓库DBMS魔力象限中位于“领导者”">SYBASE 在2011年数据仓库DBMS魔力象限中位于“领导者”</a> (0)</li><li>2010-11-09 -- <a href="https://www.dbainfo.net/sybase-ase-current-date-last_day.htm" title="Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法">Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法</a> (0)</li><li>2010-10-31 -- <a href="https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm" title="ASE中给用户授予创建函数的权限">ASE中给用户授予创建函数的权限</a> (0)</li><li>2010-10-19 -- <a href="https://www.dbainfo.net/windows-dos-command-for-loop-control-advance.htm" title="[转]CMD命令行:for命令详解">[转]CMD命令行:for命令详解</a> (0)</li><li>2010-10-18 -- <a href="https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm" title="Sybase ASE15.0.3中用SQL Function来调整日期显示格式">Sybase ASE15.0.3中用SQL Function来调整日期显示格式</a> (0)</li><li>2010-09-08 -- <a href="https://www.dbainfo.net/sybase-iq12_5-installation-guide.htm" title="SYBASE IQ12.5安装指南">SYBASE IQ12.5安装指南</a> (0)</li><li>2010-06-01 -- <a href="https://www.dbainfo.net/sybase-iq15-1-license-out-of-time-grace-period.htm" title="关于Sybase IQ15.1试用版到期后继续试用的问题解决">关于Sybase IQ15.1试用版到期后继续试用的问题解决</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/iq-transfer-strings-to-hex.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法</title>
		<link>https://www.dbainfo.net/sybase-ase-current-date-last_day.htm</link>
		<comments>https://www.dbainfo.net/sybase-ase-current-date-last_day.htm#comments</comments>
		<pubDate>Tue, 09 Nov 2010 08:22:51 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase ASE]]></category>
		<category><![CDATA[ASE]]></category>
		<category><![CDATA[create function]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[last_day]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=396</guid>
		<description><![CDATA[Oracle中查询月底那天的日期的函数为：last_day()。 在ASE中没有对应的函数，在Oracle移植到Sybase的时候，需要手动编写函数来实现，幸亏ASE15.0.2后开始支持自定义函数。 下面提供3种实现查询本月最后一天的日期的SQL语句： 第一种： select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01))) go &#160; 将本月的下一个月的年份和月份提取出来，以数字的形式相加，然后转化成类似YYYYMMDD的这种日期格式。最后直接取下个月的第一天的前一天即可。在ASE中字符串 &#39;20110101&#39; 和 convert(datetime,&#39;20110101&#39;) 是相等的。 &#160; 第二种： select dateadd(dd,-1, convert(datetime,left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + &#39;01&#39;) ) go 先将当前日期的下一个月的日期显示成YYYYMMDD的格式，取前6个字符和01拼接成下一月的第一天的日期，然后取前一天即可。convert函数中style的样式，请参考：Sybase ASE convert函数中的style日期时间样式 或者下面的写法： select dateadd(dd,-1,&#160; left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + &#39;01&#39;&#160; ) go 思路是一样的。 &#160; 第三种： SELECT DATEADD(DD, -DAY(DATEADD(MM, 1, getdate() )), DATEADD(MM, 1, getdate() ))&#160; go &#160; 此方法的思路为：计算当前日期的下一月的那天的前N天的日期，N为当前日期在本月的天数。 &#160; 改进成类似Oracle中的last_day()的函数如下：&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle中查询月底那天的日期的函数为：last_day()。 在ASE中没有对应的函数，在Oracle移植到Sybase的时候，需要手动编写函数来实现，幸亏ASE15.0.2后开始支持自定义函数。</p>
<p>下面提供3种实现查询本月最后一天的日期的SQL语句：</p>
<p>
	第一种：</p>
<blockquote>
<p>select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01))) <br />
		go<br />
		&nbsp;</p>
</blockquote>
<p>将本月的下一个月的年份和月份提取出来，以数字的形式相加，然后转化成类似YYYYMMDD的这种日期格式。最后直接取下个月的第一天的前一天即可。在ASE中字符串 &#39;20110101&#39; 和 convert(datetime,&#39;20110101&#39;) 是相等的。</p>
<p>&nbsp;</p>
<p>第二种：<span id="more-396"></span></p>
<blockquote>
<p>select dateadd(dd,-1, convert(datetime,left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + &#39;01&#39;) )<br />
		go</p>
</blockquote>
<p>先将当前日期的下一个月的日期显示成YYYYMMDD的格式，取前6个字符和01拼接成下一月的第一天的日期，然后取前一天即可。convert函数中style的样式，请参考：<a href="../sybase-ase-convert-function-style-date-time-format.htm" title="Sybase ASE convert函数中的style日期时间样式">Sybase ASE convert函数中的style日期时间样式</a></p>
<p>或者下面的写法：</p>
<blockquote>
<p>select dateadd(dd,-1,&nbsp; left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + &#39;01&#39;&nbsp; )<br />
		go</p>
</blockquote>
<p>思路是一样的。</p>
<p>&nbsp;</p>
<p>第三种：</p>
<blockquote>
<p>SELECT DATEADD(DD, -DAY(DATEADD(MM, 1, getdate() )), DATEADD(MM, 1, getdate() ))&nbsp; <br />
		go</p>
</blockquote>
<p>&nbsp;</p>
<p>此方法的思路为：计算当前日期的下一月的那天的前N天的日期，N为当前日期在本月的天数。</p>
<p>&nbsp;</p>
<p>改进成类似Oracle中的last_day()的函数如下：&nbsp;</p>
<p>第一种：</p>
<blockquote>
<p>create function last_day(@d datetime)<br />
		returns datetime<br />
		as<br />
		begin<br />
		declare @rtndate datetime<br />
		select @rtndate = dateadd(DD,-day(dateadd(MM,1,@d)),dateadd(MM,1,@d) )<br />
		return @rtndate<br />
		end<br />
		go</p>
</blockquote>
<p>第2种：</p>
<blockquote>
<p>create function dbo.last_day2(@current_date datetime)<br />
		returns datetime<br />
		as<br />
		begin<br />
		&nbsp; return dateadd(dd,-1, left(convert(varchar, dateadd(mm,1,@current_date) ,112),6) + &#39;01&#39;&nbsp; )<br />
		end<br />
		go<br />
		&nbsp;</p>
</blockquote>
<p>&nbsp;</p>
<p>实现效果如下：</p>
<blockquote>
<p>1&gt; select dbo.last_day(getdate()) ,dbo.last_day2(getdate() )<br />
		2&gt; go</p>
<p>		&nbsp;-------------------------- --------------------------<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nov 30 2010&nbsp; 4:19PM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nov 30 2010 12:00AM</p>
<p>		(1 row affected)<br />
		1&gt; select dbo.last_day(&#39;19991231&#39;) ,dbo.last_day2(&#39;19991231&#39; )<br />
		2&gt; go</p>
<p>		&nbsp;-------------------------- --------------------------<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dec 31 1999 12:00AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dec 31 1999 12:00AM</p>
<p>		(1 row affected)<br />
		1&gt; select dbo.last_day(&#39;20100228&#39;) ,dbo.last_day2(&#39;20100228&#39; )<br />
		2&gt; go</p>
<p>		&nbsp;-------------------------- --------------------------<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feb 28 2010 12:00AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feb 28 2010 12:00AM</p>
<p>		(1 row affected)<br />
		1&gt; select dbo.last_day(&#39;20000228&#39;) ,dbo.last_day2(&#39;20000228&#39; )<br />
		2&gt; go</p>
<p>		&nbsp;-------------------------- --------------------------<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feb 29 2000 12:00AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feb 29 2000 12:00AM</p>
<p>		(1 row affected)<br />
		1&gt;</p>
</blockquote>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/sybase-ase-current-date-last_day.htm">https://www.dbainfo.net/sybase-ase-current-date-last_day.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/sybase-ase-current-date-last_day.htm">Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2010-12-23 -- <a href="https://www.dbainfo.net/import-datetime-date-to-oracle-from-sybase-ase.htm" title="从sybase向oracle导入时间类型的数据">从sybase向oracle导入时间类型的数据</a> (0)</li><li>2019-04-12 -- <a href="https://www.dbainfo.net/sybase-ase-asa-recovery-service.htm" title="Sybase ASE及SQL Anywhere数据库修复专家">Sybase ASE及SQL Anywhere数据库修复专家</a> (0)</li><li>2015-01-16 -- <a href="https://www.dbainfo.net/one-way-to-recover-master-configuration-area.htm" title="master数据库配置区域(configuration area)损坏的一种修复方法">master数据库配置区域(configuration area)损坏的一种修复方法</a> (1)</li><li>2014-10-10 -- <a href="https://www.dbainfo.net/ase-object-name-length-limit.htm" title="ASE对象名称长度限制">ASE对象名称长度限制</a> (0)</li><li>2014-06-09 -- <a href="https://www.dbainfo.net/count_all_tables_rowcount.htm" title="统计用户数据库内所有表的行数">统计用户数据库内所有表的行数</a> (0)</li><li>2013-11-19 -- <a href="https://www.dbainfo.net/showplan_html_format.htm" title="以HTML格式显示ASE查询计划">以HTML格式显示ASE查询计划</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation5.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作">Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作</a> (1)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation4.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务">Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation3.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3">Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation2.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序">Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/sybase-ase-current-date-last_day.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASE中给用户授予创建函数的权限</title>
		<link>https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm</link>
		<comments>https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm#comments</comments>
		<pubDate>Sat, 30 Oct 2010 16:39:39 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase ASE]]></category>
		<category><![CDATA[create function]]></category>
		<category><![CDATA[grant]]></category>
		<category><![CDATA[revoke]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=383</guid>
		<description><![CDATA[Sybase ASE在15.0.2后支持用户自定义函数，但是只能返回标量值，且调用的时候必须在函数名前加创建者的用户名，这一点很不友好哦。数据库的dbowner默认就有创建函数的权限。普通的用户默认不具有创建函数的权限。 用户escourt4创建自定义函数的时候报下面的错误： Msg 10331, Level 14, State 1: Server &#39;TEST&#39;, Procedure &#39;datefmt_lzf&#39;, Line 4: CREATE FUNCTION permission denied, database ultranms2, owner dbo 但是Sybase自动的客户端工具Sybase Central中却没有能够授予创建函数权限的地方。 只能授予创建缺省值(create default)，创建过程(create procedure)，创建规则(create rule)，创建表(create table)，创建视图(create view)，创建加密密钥的权限。 可以看到在Sybase Central中不能为用户授予创建函数(create function) 的权限。这可能是Sybase Central的一个缺陷。 看来只能到命令行下对用户进行授予创建函数的权限了。 执行： grant create function&#160; to escourt4 go 这样就给用户escourt4授予了创建函数的权限了。验证一下escourt4是否被授予了create function的权限。 执行 sp_helprotect 或者 sp_helprotect escourt4 这两个命令都没有看到escourt4被授予create function的信息。 但是，escourt4的确已经具有了创建函数的权限了。 执行下面的创建一个简单函数的列子。 [...]]]></description>
			<content:encoded><![CDATA[<p>Sybase ASE在15.0.2后支持用户自定义函数，但是只能返回标量值，且调用的时候必须在函数名前加创建者的用户名，这一点很不友好哦。数据库的dbowner默认就有创建函数的权限。普通的用户默认不具有创建函数的权限。</p>
<p>用户escourt4创建自定义函数的时候报下面的错误：</p>
<blockquote>
<p>Msg 10331, Level 14, State 1:<br />
		Server &#39;TEST&#39;, Procedure &#39;datefmt_lzf&#39;, Line 4:<br />
		CREATE FUNCTION permission denied, database ultranms2, owner dbo</p>
</blockquote>
<p>但是Sybase自动的客户端工具Sybase Central中却没有能够授予创建函数权限的地方。</p>
<p><img alt="Sybase Central中授予用户权限" height="439" src="https://www.dbainfo.net/wp-content/uploads/image/sybase-ase-grant-privileges.jpg" width="423" /></p>
<p>只能授予创建缺省值(create default)，创建过程(create procedure)，创建规则(create rule)，创建表(create table)，创建视图(create view)，创建加密密钥的权限。<span id="more-383"></span></p>
<p>可以看到在Sybase Central中不能为用户授予创建函数(create function) 的权限。这可能是Sybase Central的一个缺陷。</p>
<p>看来只能到命令行下对用户进行授予创建函数的权限了。</p>
<p>
	执行：</p>
<blockquote>
<p>grant create function&nbsp; to escourt4</p>
<p>go</p>
</blockquote>
<p>这样就给用户escourt4授予了创建函数的权限了。验证一下escourt4是否被授予了create function的权限。</p>
<p>执行 sp_helprotect 或者 sp_helprotect escourt4 这两个命令都没有看到escourt4被授予create function的信息。<br />
	但是，escourt4的确已经具有了创建函数的权限了。 执行下面的创建一个简单函数的列子。</p>
<blockquote>
<p>create function datefmt_lzf(@d datetime)<br />
		returns char(19)<br />
		as<br />
		&nbsp; return str_replace(convert(char(19),@d,117),&#39;/&#39;,&#39;-&#39;)<br />
		go</p>
</blockquote>
<p>
	返回日期的格式为：yyyyy-mm-dd hh:mi:ss 如：2010-10-31 00:18:32</p>
<p>&nbsp;</p>
<p>这样的话，怎么才能知道一个用户具有了创建函数的权限呢？</p>
<p>我初步估计是Sybase ASE一个小bug，导致不能正确的显示用户所拥有的权限。</p>
<p>验证方法如下：</p>
<p>1.既然在sp_helprotect不能正确的显示用户被授予create function的情况，先分析一下系统存储过程sp_helprotect的语法。发现这个过程内主要引用了：spt_values、sysattributes、sysprotects这三张系统表。</p>
<p>2. 建立一个文件，放在c:\1.txt ，内容如下：</p>
<blockquote>
<p>select * from master..spt_values<br />
		go<br />
		select * from ultranms2..sysprotects<br />
		go<br />
		select * from ultranms2..sysattributes<br />
		go<br />
		&nbsp;</p>
</blockquote>
<p>3.在用户被授予create function 之前，在命令提示符下执行如下命令：</p>
<blockquote>
<p>isql -Usa -P&lt;<em>sa_password</em>&gt; -S&lt;server_name&gt; -ic:\1.txt -oc:\before.txt</p>
</blockquote>
<p>4.给用户授予create function的权限，用sa登录数据库，执行：</p>
<blockquote>
<p>grant create function to escourt4</p>
</blockquote>
<p>5.在命令提示符下执行：</p>
<blockquote>
<p>isql -Usa -P&lt;<em>sa_password</em>&gt; -S&lt;server_name&gt; -ic:\1.txt -oc:\after.txt</p>
</blockquote>
<p>6.命令提示符下执行：</p>
<blockquote>
<p>fc c:\before.txt&nbsp; c:\after.txt c:\compare_result.txt</p>
</blockquote>
<p>打开比较结果c:\compare_result.txt文件，内容如下：</p>
<blockquote>
<p>正在比较文件 before.txt 和 AFTER.TXT<br />
		***** before.txt<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 </p>
<p>		(56 rows affected)<br />
		&nbsp;class&nbsp; attribute object_type<br />
		***** AFTER.TXT<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; 280&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 </p>
<p>		(57 rows affected)<br />
		&nbsp;class&nbsp; attribute object_type<br />
		*****</p>
<p>		&nbsp;</p>
</blockquote>
<p>7.分析，通过上面的比较结果，发现在用户被授予创建函数的权限后，表sysprotects中增加了一条记录。</p>
<blockquote>
<p>id,uid,action,protecttype,columns,grantor<br />
		0,4,280,1,,1<br />
		&nbsp;</p>
</blockquote>
<p>到官方文档中查看sysprotects表的action列都有什么权限列表，唯独没有看到280代表什么。</p>
<p>action列可以为以下权限之一：</p>
<blockquote>
<p>﻿151 = references 167 =set proxy 或set session authorization &nbsp;&nbsp;&nbsp; 221 = create trigger 222 = create proc 224 = execute <br />
		187 = set statistics on 188 = set statistics off &nbsp;&nbsp;&nbsp; 228 = dump database 233 =create default &nbsp;&nbsp;&nbsp; &nbsp;<br />
		193 = select &nbsp;&nbsp;&nbsp; 235 =dump transaction &nbsp;&nbsp;&nbsp; &nbsp;<br />
		195 = insert &nbsp;&nbsp;&nbsp; 236 = create rule &nbsp;&nbsp;&nbsp; &nbsp;<br />
		196 = delete &nbsp;&nbsp;&nbsp; 253 = connect &nbsp;&nbsp;&nbsp; &nbsp;<br />
		197 = update &nbsp;&nbsp;&nbsp; 282 = delete statistics &nbsp;&nbsp;&nbsp; &nbsp;<br />
		198 = create table &nbsp;&nbsp;&nbsp; 317 = dbcc &nbsp;&nbsp;&nbsp; &nbsp;<br />
		203 = create database &nbsp;&nbsp;&nbsp; 320 = truncate table &nbsp;&nbsp;&nbsp; &nbsp;<br />
		205 = grant &nbsp;&nbsp;&nbsp; 326 = update statistics &nbsp;&nbsp;&nbsp; &nbsp;<br />
		206 = revoke 207 = create view &nbsp;&nbsp;&nbsp; 347 = set tracing &nbsp;&nbsp;&nbsp; &nbsp;</p>
</blockquote>
<p>系统表sysprotects.action不包含create function，那其它的表spt_values,sysattributes呢？</p>
<p>通过搜索上面生成的before.txt和after.txt两个文件，都没有找到关于create function的内容。</p>
<p>难怪sp_helprotect不会显示关于用户是否被授予了create function的权限了，没有基础数据支持啊。 呵呵。</p>
<p>最后再次验证一下action=280表示权限：create function。</p>
<p>执行revoke create function from escourt4撤销刚才授予给用户escourt4的创建函数的权限。</p>
<p>再次查询一下sysprotects表，发现没有了action=280的那条记录。</p>
<p>ps：action=280表示创建函数(create function)的权限。希望Sybase 能够完善这一点~</p>
<p>
	&nbsp;</p>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm">https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm">ASE中给用户授予创建函数的权限</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2013-09-05 -- <a href="https://www.dbainfo.net/find-not-grant-privilege-tables.htm" title="查找没有授予给其它用户权限的表以及权限">查找没有授予给其它用户权限的表以及权限</a> (0)</li><li>2012-06-07 -- <a href="https://www.dbainfo.net/iq-transfer-strings-to-hex.htm" title="IQ中得到字符串的十六进制形式">IQ中得到字符串的十六进制形式</a> (0)</li><li>2010-11-09 -- <a href="https://www.dbainfo.net/sybase-ase-current-date-last_day.htm" title="Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法">Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法</a> (0)</li><li>2010-10-18 -- <a href="https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm" title="Sybase ASE15.0.3中用SQL Function来调整日期显示格式">Sybase ASE15.0.3中用SQL Function来调整日期显示格式</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/ase-grant-create-function-privilege-to-user.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sybase ASE15.0.3中用SQL Function来调整日期显示格式</title>
		<link>https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm</link>
		<comments>https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm#comments</comments>
		<pubDate>Mon, 18 Oct 2010 12:58:44 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase ASE]]></category>
		<category><![CDATA[ASE V15.0.3]]></category>
		<category><![CDATA[create function]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=351</guid>
		<description><![CDATA[Sybase ASE自15.0.2后增加了用户自定义函数的功能。 在Sybase中，以 2010-10-18 12:30:01格式显示日期数据时，用convert函数不能实现，需要替换一下字符。 select convert(varchar,getdate(),117) go &#160;------------------------------ &#160;2010/10/18 20:51:10 (1 row affected) 利用函数str_replace替换上面返回的日期字符串中的/为- str_replace(convert(char(19),getdate(),117),&#39;/&#39;,&#39;-&#39;) 1&#62; select str_replace(convert(char(19),getdate(),117),&#39;/&#39;,&#39;-&#39;) 2&#62; go &#160;------------------- &#160;2010-10-18 20:53:13 (1 row affected) &#160; 利用ASE15.0.2开始增加的用户自定义函数功能，创建一个SQLFunction。 create function datefmt_lzf(@d datetime) returns char(19) as &#160; return str_replace(convert(char(19),@d,117),&#39;/&#39;,&#39;-&#39;) go &#160; 函数的用法： 1&#62; select dbo.datefmt_lzf(getdate()) 2&#62; go &#160;------------------- &#160;2010-10-18 20:55:46 (1 row affected) 1&#62; select [...]]]></description>
			<content:encoded><![CDATA[<p>Sybase ASE自15.0.2后增加了用户自定义函数的功能。</p>
<p>在Sybase中，以 2010-10-18 12:30:01格式显示日期数据时，用convert函数不能实现，需要替换一下字符。</p>
<p>select convert(varchar,getdate(),117)<br />
	go</p>
<p>&nbsp;------------------------------<br />
	&nbsp;2010/10/18 20:51:10</p>
<p>	(1 row affected)</p>
<p>利用函数str_replace替换上面返回的日期字符串中的/为-</p>
<p>str_replace(convert(char(19),getdate(),117),&#39;/&#39;,&#39;-&#39;)</p>
<blockquote>
<p>1&gt; select str_replace(convert(char(19),getdate(),117),&#39;/&#39;,&#39;-&#39;)<br />
		2&gt; go</p>
<p>		&nbsp;-------------------<br />
		&nbsp;2010-10-18 20:53:13</p>
<p>		(1 row affected)<span id="more-351"></span></p>
</blockquote>
<p>&nbsp;</p>
<p>利用ASE15.0.2开始增加的用户自定义函数功能，创建一个SQLFunction。</p>
<p>create function datefmt_lzf(@d datetime)<br />
	returns char(19)<br />
	as<br />
	&nbsp; return str_replace(convert(char(19),@d,117),&#39;/&#39;,&#39;-&#39;)<br />
	go</p>
<p>&nbsp;</p>
<p>函数的用法：</p>
<blockquote>
<p>1&gt; select dbo.datefmt_lzf(getdate())<br />
		2&gt; go</p>
<p>		&nbsp;-------------------<br />
		&nbsp;2010-10-18 20:55:46</p>
<p>		(1 row affected)<br />
		1&gt; select <span style="color: rgb(255, 0, 0);"><strong>dbo.</strong></span>datefmt_lzf(convert(datetime,&#39;Oct 18 2010 20:56:45&#39;))<br />
		2&gt; go</p>
<p>		&nbsp;-------------------<br />
		&nbsp;2010-10-18 20:56:45</p>
<p>		(1 row affected)<br />
		1&gt;</p>
</blockquote>
<p>注意函数名前要加上所属用户名。</p>
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm">https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm">Sybase ASE15.0.3中用SQL Function来调整日期显示格式</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2015-01-16 -- <a href="https://www.dbainfo.net/one-way-to-recover-master-configuration-area.htm" title="master数据库配置区域(configuration area)损坏的一种修复方法">master数据库配置区域(configuration area)损坏的一种修复方法</a> (1)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation5.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作">Sybase ASE 15.0.3 for windows平台安装文档 – 5、安装后的配置工作</a> (1)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation4.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务">Sybase ASE 15.0.3 for windows平台安装文档 – 4、安装Sybase数据库服务</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation3.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3">Sybase ASE 15.0.3 for windows平台安装文档 – 3、升级到 Sybase 15.0.3 ESD #3</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation2.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序">Sybase ASE 15.0.3 for windows平台安装文档 – 2、安装Sybase ASE程序</a> (0)</li><li>2013-11-11 -- <a href="https://www.dbainfo.net/ase-15-0-3-for-windows-installation1.htm" title="Sybase ASE 15.0.3 for windows平台安装文档 – 1、安装前的准备工作">Sybase ASE 15.0.3 for windows平台安装文档 – 1、安装前的准备工作</a> (1)</li><li>2013-10-15 -- <a href="https://www.dbainfo.net/ase-xml-introduction.htm" title="ASE中xml服务使用方法简介">ASE中xml服务使用方法简介</a> (0)</li><li>2013-09-16 -- <a href="https://www.dbainfo.net/select-random-rows-from-table.htm" title="ASE从表中随机选择数据的三种方法">ASE从表中随机选择数据的三种方法</a> (0)</li><li>2013-09-08 -- <a href="https://www.dbainfo.net/get-current-running-sql.htm" title="查看ASE v15正在执行的SQL语句内容">查看ASE v15正在执行的SQL语句内容</a> (0)</li><li>2012-11-14 -- <a href="https://www.dbainfo.net/sybase-ase-job-scheduler-schedule-jobs.htm" title="在Sybase ASE上利用job scheduler定时调度作业">在Sybase ASE上利用job scheduler定时调度作业</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/sybase-ase15-0-3-sql-function-convert_datetime-format.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
