sql 自定义函数--固定格式字符转时间类型

遇到一个德国的客户,他们的时间格式是JJJJ-TT-DD
HH:MM:SS,程序按照这个格式将时间插入数据库,但是在sql自带的转换函数convert、cast过程中报错,网上搜了下都说用convert、cast可以直接转换,但是这个客户的机器就是不行,没有办法自己写了个转换函数,供大家参考:

由于自定义函数里面不能直接使用getdate方法;所以先创建了个获取本地时间的小函数:

create view v_getdate as
select getdate()
as now_date

然后是转换函数:


 1 CREATE  FUNCTION ToDateTime(@DateStr varchar(20))
2 RETURNS datetime
3 AS
4 BEGIN
5 declare @OutTime datetime
6 select @OutTime=now_date from v_getdate
7 if(len(@DateStr)<20)
8 set @DateStr=substring(@DateStr+‘ 00:00:00‘,1,20)
9 set @OutTime=dateadd(year,0-year(@OutTime)+cast(substring(@DateStr,1,4) as int),@OutTime)
10 set @OutTime=dateadd(month,0-month(@OutTime)+cast(substring(@DateStr,6,2) as int),@OutTime)
11 set @OutTime=dateadd(day,0-day(@OutTime)+cast(substring(@DateStr,9,2) as int),@OutTime)
12 set @OutTime=dateadd(hour,0-DATEPART(HH,@OutTime)+cast(substring(@DateStr,12,2) as int),@OutTime)
13 set @OutTime=dateadd(minute,0-DATEPART(N,@OutTime)+cast(substring(@DateStr,15,2) as int),@OutTime)
14 set @OutTime=dateadd(second,0-DATEPART(S,@OutTime)+cast(substring(@DateStr,19,2) as int),@OutTime)
15 return @OutTime
16 END

调用示例:select dbo.ToDateTime(‘2014-04-05 06:07:08‘)

时间: 2024-07-31 03:26:14

sql 自定义函数--固定格式字符转时间类型的相关文章

SQL自定义函数split分隔字符串

SQL自定义函数split分隔字符串 一.F_Split:分割字符串拆分为数据表 Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max), --源字符串 @Separator nvarchar(10)=' ' --分隔符号,默认为空格 ) RETURNS @SplitStringsTable TABLE --输出的数据表 ( [id] int identity(1,1), [value] nvarchar(max) ) AS BE

sql自定义函数及C#中调用

1.在C#中调用sql自定义函数 1.1 标量值函数 sql语句调用 select  dbo.GetClassIDWithName(1) string strSql = string.Format("select dbo.GetClassIDWithName('{0}')",dtTime);DataTable dt = DB_Contrast.DB.OleDbHelper.GetDataTable(strSql); 1.2 表值函数 sql语句调用 select * from GetA

SQL自定义函数function

https://blog.csdn.net/qq_23833037/article/details/53170789 https://www.cnblogs.com/youring2/p/4916400.html 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回. sql函数必须有返回值. ps: 函数看成一个处理某些数据的功能,因有返回值,则在代码使用中,需要一个处理过的数据. 可直接调用函数处理数据,返回数据给代码使用. 标量函数:返回一个标量值. 表格值函数{内联表

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

PL/SQL自定义函数

从SQL表达式中调用函数的限制 为了从SQL表达式中调用函数,一个用户定义函数必须: 是存储函数 只接受IN函数 只接收有受的SQL数据类型,而不接受PL/SQL数据类型 返回数据类型为有效的SQL数据类型,而非PL/SQL特殊的类型 从SQL表达式中调用的函数不能包含DML语句 从在表T上的UPDATE/DELETE语句中调用的函数,函数内容不能包含在同一个表T上的DML 从在表T上的UPDATE或DELETE语句中调用的函数,函数内容不能查询同一个表 从SQL语句中调用的函数不能包含结束事物

SQL 存储过程语句拼接愁人的时间类型

背景介绍:有一个小需求 要根据传入的起止时间,没一个小时统计一下数据的平均值,我就想到了用存储过程来实现. sql写完之后一执行, 咦~怎么回事 ,我没有转换类型的地方啊,难道是 语句拼接出错了. 下面是定义的两个时间变量 格式都是DateTime格式的, 问题就出在了时间类型的语句拼接上,想了两个解决方案, 拼接的时候把时间改为varchar类型的,或者直接把原来的时间类型定义为varchar类型的. 类型转换用CAST() 函数 改完之后 一执行 数据有了,但是有点不对啊,我自己加的测试数据

sql自定义函数大全

CREATE FUNCTION [dbo].[f_AddYears] ( ---增加年 @currentDay DATETIME , @years INT )RETURNS DATETIMEAS BEGIN RETURN DATEADD(year,@years,@currentDay) END --增加月CREATE FUNCTION [dbo].[f_AddMonths] ( ---增加月 @currentDay DATETIME , @months INT )RETURNS DATETIME

MS SQL自定义函数IsPositiveInteger

判断字符串是否为正整数,0开始的的数字不算. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[svf_IsPositiveInteger] ( @string NVARCHAR(MAX) ) RETURNS BIT --函数返BIT数据类型,是数字返回1,非数字返回0. AS BEGIN DECLARE @rtv BIT = 1 DECLARE @str NVARCHAR(MAX) = LTRIM(R

sql 自定义函数返回中文,数字,英文

--提取数字IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULLDROP FUNCTION DBO.GET_NUMBER2GOCREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^0-9]%',@S) > 0BEGINset @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')ENDRETURN @S