最近对sql server数据库表操作遇到如下问题:A表中s_date字段为int类型(20130901),B表中s_date字段为datetime类型(2013-09-01),比较A表和B表的s_date的大小。
错误方式:将A表s_date的int型抓换为datetime类型:CONVERT(varchar(10),CAST(s_date AS datetime),120)
报错: Arithmetic overflow error converting expression to data type datetime.
原因:关于DateTime,在将DateTime类型,插入到数据库的时候,最容易出现的一种错误:“SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间”原因是我们在取DateTime.MinValue的值,并插入到数据库的时候,DateTime.MinValue值范围和数据库 DateTime类型数据范围不一致造成的。数据库中,DateTime类型字段,最小值1/1/1753 12:00:00
正确方式:把int先转varchar型,然后再转datetime型,CONVERT(varchar(10),CAST(CAST(s_date AS varchar) AS datetime),120)
最近对sql server数据库表操作遇到如下问题:A表中s_date字段为int类型(20130901),B表中s_date字段为datetime类型(2013-09-01),比较A表和B表的s_date的大小。错误方式:将A表s_date的int型抓换为datetime类型:CONVERT(varchar(10),CAST(s_date AS datetime),120) 报错: A
select @m=month(@date)
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,@date)+'-'+convert(varchar(10),@m)+'-01'
return datediff(day,@time,dateadd(mm,3,@time))
--按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
Create function Get_StrArrayLength
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
returns
int
begin
declare @location
int
declare @start
int
declare @length
int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
return @length
--按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
Create function Get_StrArrayStrOfIndex
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index
int
--取第几个元素
returns varchar(1024)
begin
declare @location
int
declare @start
int
declare @next
int
declare @seed
int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
select dbo.Get_StrArrayStrOfIndex('8,9,4','',4)
--结合上边两个函数,象数组一样遍历字符串中的元素
create function f_splitstr(@Source
Sql
varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
begin
declare @ch as varchar(100)
set @Source
Sql
=@Source
Sql
+@StrSeprate
while(@Source
Sql
<>'')
begin
set @ch=left(@Source
Sql
,charindex(',',@Source
Sql
,1)-1)
insert @temp values(@ch)
set @Source
Sql
=stuff(@Source
Sql
,1,charindex(',',@Source
Sql
,1),'')
return
select * from dbo.f_splitstr('1,2,3,4',',')
--全角和半角
转
换函数
Create FUNCTION f_Convert(
@str NVARCHAR(4000), --要
转
换的字符串
@flag bit --
转
换标志,0
转
换成半角,1
转
换成全角
)RETURNS nvarchar(4000)
BEGIN
DECLARE @pat nvarchar(8),@step
int
,@i
int
,@spc
int
IF @flag=0
Select @pat=N'%[!-~]%',@step=-65248,
@str=REPLACE(@str,N' ',N' ')
Select @pat=N'%[!-~]%',@step=65248,
@str=REPLACE(@str,N' ',N' ')
SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
WHILE @i>0
Select @str=REPLACE(@str,
SUBSTRING(@str,@i,1),
NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
RETURN(@str)
declare @s1 varchar(8000)
select @s1='中 2-3456a78STUVabn中国opwxyz'
select dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)
函数返回值是表
create table test(id
int
primary key,name char(10))
insert
int
o test values(1,'test1')
insert
int
o test values(2,'test2')
insert
int
o test values(3,'test3')
insert
int
o test values(4,'test4')
1、标量函数
create function return_count()
returns
int
begin
declare @count
int
select @count=count(*) from test
return @count
select dbo.return_count() cont --count为显示的列头
--运行结果
--count
sql
删除重复的记录
打开测试数据库test,并以表w01为例,将下面的
SQL
语句放入
sql
2000查询分析器中,一段一段执行即可看到效果
---在
sql
2000下创建测试数据表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[w01]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[w01]
---在
sql
2005下创建测试数据表,如果是
sql
2005则用本段来判断数据表是否存在
---if exists(select 1 from sys.tables where name='w01')
---drop table w01
----开始创建测试数据库
create table w01(gs903 varchar(32),gs1002 varchar(32))
insert
int
o w01
select '1','a'
union all select '1','a'
union all select '1','a'
union all select '2','a'
union all select '2','e'
union all select '3','b'
union all select '3','d'
select * from w01
---为表w01添加一个可以表示唯一标示的自增字段ID
alter table w01 add [ID] [
int
] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL
---查询删除前的数据和记录数:7
select * from w01
select count(*) from w01
---查询具有重复记录的所有记录;3
select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002
having count(*)>1
order by count desc
---删除重复的数据:2行
delete from w01 where id not in (select max(id) from w01 group by gs903,gs1002)
---看看删除后还有没有重复记录:0
select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002
having count(*)>1
order by count desc
---删除后的数据和记录数:7-2=5
select * from w01
select count(*) from w01
用
SQL
语句添加删除修改字段
alter table docdsp add dspcode char(200)
Alter TABLE table_NAME Drop COLUMN column_NAME
修改字段类
型
Alter TABLE table_name Alter COLUMN column_name new_data_type
sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类
型
)的名称。
sp_rename [ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
--假设要处理的表名为: tb
--判断要添加列的表中是否有主键
if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype='PK')
begin
pr
int
'表中已经有主键,列只能做为普通列添加'
--添加
int
类
型
的列,默认值为0
alter table tb add 列名
int
default 0
begin
pr
int
'表中无主键,添加主键列'
--添加
int
类
型
的列,默认值为0
alter table tb add 列名
int
primary key default 0
我们的Content
Server
服务器在改了
Sql
Server
数据库语言以后,在使用DA时,无法编辑新建文件,异常arithmetic overflow error converting expression to data type
datetime
,重新将数据库语言改回去也无法解决,今天发现ODBC连接配置也被更改。所以将其更换回来
如出现上述问题,看一下这个语言和数据库语言是否一致。...
错误信息:Arithmetic overflow error converting expression to data type
int
.(将expression
转化
为数据类
型
int
时发生算术溢出错误)
原因:itemcount 为
int
类
型
,在sum...
1、首先:
举例:
INT
类
型
日期
A =20180319 将A
转
换成 cast( cast( A as varchar) as date [
datetime
]) DATE或者
DATETIME
这里 面用B代替
转
换的结果。
2、然后:
通过 DATEADD(datepart,number,date) 计算得到增减后的
日期
。参数取值如下:
date 参数是合法的
日期
表...
今天用java开发
sqlserver
2008数据库时,将结果存入bean时
报错
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff],后来发现,是数据库字段格式不对,
日期
格式应该使用datetiem,如果实在是用date类
型
,需要将其结果读取存入map集合中,在java前台通过dateformat
转
换后存入bean中即可。
如果服务...
昨天,一个读者向我提交了一个问题,请我就
SQL
server
隐式
转
换发表一些看法。当
SQL
server
遇到一个不匹配类
型
的表达式的时候,它有两种选择。它使用隐式
转
换并能够执行或者
转
换错误而导致执行失败。在深入隐式
转
换之前,让我们假定错误的情形。
如果一个隐式
转
换不可能实现,
SQL
server
可能产生两种可能的错误。如果两种数据类
型
不能完全兼容(简言之,在两...
int
和date的互
转
1、业务场景2、Date
转
int
(添加 / 修改时)3、
int
转
Date(查询时)4、小结
1、业务场景
因为我的实体类中有个Date类
型
的属性,但是数据表中对应字段的类
型
却是
int
类
型
的,所以才会有这么一个需求,要求添加或修改记录的时候将Date类
型
转
换成
Int
存进表,查询的时候将
int
转
换为Date类
型
展示出来,如果不
转
换的话,进行增删或查询的时候一定会
报错
。
2、Date
转
int
(添加 / 修改时)
需要借助My
SQL
提供的UNIX_TIMESTAMP()函数来
转
换。代码如下:
SqlServer
将big
int
类
型
存储的数据
转
换为
datetime
,附带
日期
检测
-- =============================================
-- Author: Wiggins
-- Create date: 20200613
-- Description: big
int
转
datetime
附带
日期
有效性检测
-- =============================================
CREATE function [dbo].[fun_Co
可以使用Python中的`
datetime
`模块来处理
日期
和时间。要将`
datetime
`类
型
转
换为`
int
`类
型
,可以使用`timestamp()`方法将
日期
时间
转
换为自1970年1月1日以来的秒数,并将其
转
换为整数:
import
datetime
# 创建一个
datetime
对象
my_
datetime
=
datetime
.
datetime
(2023, 3, 3, 12, 0, 0)
# 将
datetime
对象
转
换为
int
类
型
my_
int
=
int
(my_
datetime
.timestamp())
# 打印结果
pr
int
(my_
int
)
输出将是一个整数,表示从1970年1月1日以来的秒数,即:
'1689292800'