SQL中CAST和CONVERT的区别是什么

SQL中CAST和CONVERT的区别是什么,第1张

如果SQL Server程序员想将表达式从一种换为另一种,他可以从SQL Server 7和2000中自带的两种功能中做出选择。在存储过程或其他情况下,我们常常需要将数据从datetime型转化成varchar型;CONVERT和CAST就可以用于这种情况。

由于SQL Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很容易让人困惑了。CONVERT是专对SQL Server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。

CAST是两种功能中更具ANSI标准的功能,即虽然更具便携性(比如,使用CAST的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用CAST。因此,我建议首先使用CAST,如果遇到必须使用CONVERT的情况时再使用CONVERT。

CAST和CONVERT还能联合使用,达到特殊的效果。比如,在current date下生成char变量一般使用以下方法:

SELECT CONVERT(CHAR(10), CURRENT_TIMESTAMP, 102)

(102表明使用了ANSI日期模式,即yymmdd型)

然而,如果你希望将这个变量明确生成为datetime或smalldatetime变量,以此在特定的数据库栏中兼容,那么你可以使用以下语句:

SELECT CAST(CONVERT(CHAR(10),CURRENT_TIMESTAMP,102) AS DATETIME

返回值将是 yymmdd 00:00:00(如12:00AM作为时间戳;

DateTimeNowToShortTimeString()

DateTime dt = DateTimeNow;

dtToString();//2005-11-5 13:21:25

dtToFileTime()ToString();//127756416859912816

dtToFileTimeUtc()ToString();//127756704859912816

dtToLocalTime()ToString();//2005-11-5 21:21:25

dtToLongDateString()ToString();//2005年11月5日

dtToLongTimeString()ToString();//13:21:25

dtToOADate()ToString();//386615565508218

dtToShortDateString()ToString();//2005-11-5

dtToShortTimeString()ToString();//13:21

dtToUniversalTime()ToString();//2005-11-5 5:21:25

dtYearToString();//2005

dtDateToString();//2005-11-5 0:00:00

dtDayOfWeekToString();//Saturday

dtDayOfYearToString();//309

dtHourToString();//13

dtMillisecondToString();//441

dtMinuteToString();//30

dtMonthToString();//11

dtSecondToString();//28

dtTicksToString();//632667942284412864

dtTimeOfDayToString();//13:30:284412864

dtToString();//2005-11-5 13:47:04

dtAddYears(1)ToString();//2006-11-5 13:47:04

dtAddDays(11)ToString();//2005-11-6 16:11:04

dtAddHours(11)ToString();//2005-11-5 14:53:04

dtAddMilliseconds(11)ToString();//2005-11-5 13:47:04

dtAddMonths(1)ToString();//2005-12-5 13:47:04

dtAddSeconds(11)ToString();//2005-11-5 13:47:05

dtAddMinutes(11)ToString();//2005-11-5 13:48:10

dtAddTicks(1000)ToString();//2005-11-5 13:47:04

dtCompareTo(dt)ToString();//0

dtAdd()ToString();//问号为一个时间段

dtEquals("2005-11-6 16:11:04")ToString();//False

dtEquals(dt)ToString();//True

dtGetHashCode()ToString();//1474088234

dtGetType()ToString();//SystemDateTime

dtGetTypeCode()ToString();//DateTime

dtGetDateTimeFormats('s')[0]ToString();//2005-11-05T14:06:25

dtGetDateTimeFormats('t')[0]ToString();//14:06

dtGetDateTimeFormats('y')[0]ToString();//2005年11月

dtGetDateTimeFormats('D')[0]ToString();//2005年11月5日

dtGetDateTimeFormats('D')[1]ToString();//2005 11 05

dtGetDateTimeFormats('D')[2]ToString();//星期六 2005 11 05

dtGetDateTimeFormats('D')[3]ToString();//星期六 2005年11月5日

dtGetDateTimeFormats('M')[0]ToString();//11月5日

dtGetDateTimeFormats('f')[0]ToString();//2005年11月5日 14:06

dtGetDateTimeFormats('g')[0]ToString();//2005-11-5 14:06

dtGetDateTimeFormats('r')[0]ToString();//Sat, 05 Nov 2005 14:06:25 GMT

stringFormat("{0:d}",dt);//2005-11-5

stringFormat("{0:D}",dt);//2005年11月5日

stringFormat("{0:f}",dt);//2005年11月5日 14:23

stringFormat("{0:F}",dt);//2005年11月5日 14:23:23

stringFormat("{0:g}",dt);//2005-11-5 14:23

stringFormat("{0:G}",dt);//2005-11-5 14:23:23

stringFormat("{0:M}",dt);//11月5日

stringFormat("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT

stringFormat("{0:s}",dt);//2005-11-05T14:23:23

stringFormat("{0:t}",dt);//14:23

stringFormat("{0:T}",dt);//14:23:23

stringFormat("{0:u}",dt);//2005-11-05 14:23:23Z

stringFormat("{0:U}",dt);//2005年11月5日 6:23:23

stringFormat("{0:Y}",dt);//2005年11月

stringFormat("{0}",dt);//2005-11-5 14:23:23

stringFormat("{0:yyyyMMddHHmmssffff}",dt);

计算2个日期之间的天数差

-----------------------------------------------

DateTime dt1 = ConvertDateTime("2007-8-1");

DateTime dt2 = ConvertDateTime("2007-8-15");

TimeSpan span = dt2Subtract(dt1);

int dayDiff = spanDays + 1;

计算某年某月的天数

-----------------------------------------------

int days = DateTimeDaysInMonth(2007, 8);

days = 31;

给日期增加一天、减少一天

-----------------------------------------------

DateTime dt =DateTimeNow;

dtAddDays(1); //增加一天

dtAddDays(-1);//减少一天

其它年份方法类似

Oracle SQL里转换日期函数

-----------------------------------------------

to_date("2007-6-6",'YYYY-MM-DD");

to_date("2007/6/6",'yyyy/mm/dd");

如下一组数据,如何查找表里包含9月份的记录:

CGGC_STRATDATE CGGC_ENDDATE

=========================================

2007-8-4 2007-9-5

2007-9-5 2007-9-20

2007-9-22 2007-10-5

SELECT FROM TABLE

(TO_DATE('2007/9/1','yyyy/mm/dd') BETWEEN CGGC_STRATDATE

AND CGGC_ENDDATE OR CGGC_STRATDATE >=TO_DATE('2007/9/1','yyyy/mm/dd')

AND CGGC_ENDDATE<=TO_DATE('2007/9/30','yyyy/mm/dd') "

OR TO_DATE('2007/9/30','yyyy/mm/dd') BETWEEN CGGC_STRATDATE

AND CGGC_ENDDATE) ORDER BY CGGC_STRATDATE ASC

代码如下:

function wavdata=readTIMITwav(filepath)

% author:

% zr

% date:

% 2013-12-29

% function:

% 实现读取TIMIT语料库中音频文件的功能

% filepath:

% TIMIT语料库中音频文件的路径

% wavdata:

% 音频文件

clc;

clear all;

fidin=fopen(filepath,'r'); % 打开文件,指定对该文件进行的 *** 作方式为只读

A = fread(fidin,inf,'int16'); % 以二进制形式读取文件的全部数据,精度为16位整型

wavdata=A/(2^15); % SPHERE 文件头1024字节,转换成wav格式

fclose(fidin); % 关闭文件

将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。 语法

使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, style]) 参数

expression 是任何有效的 Microsoft SQL Server" 表达式。有关更多信息,请参见表达式。 data_type 目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。 length nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。 style 日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

将某种数据类型的表达式显式转换为另一种数据类型。有关可用的数据类型的更多信息,请参见数据类型。日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。当转换为字符数据时输出。

隐性转换对于用户是不可见的。

SQL Server 自动将数据从一种数据类型转换成另一种数据类型。例如,如果一个 smallint 变量和一个 int 变量相比较,这个 smallint 变量在比较前即被隐性转换成 int 变量。 显式转换使用 CAST 或 CONVERT 函数。

CAST 和 CONVERT 函数将数值从一个数据类型(局部变量、列或其它表达式)转换到另一个数据类型。例如,下面的 CAST 函数将数值 $15727 转换成字符串 ''$15727'':CAST ( $15727 AS VARCHAR(10) )

CAST 函数基于 SQL-92 标准并且优先于 CONVERT。 当从一个 SQL Server 对象的数据类型向另一个转换时,一些隐性和显式数据类型转换是不支持的。例如,nchar 数值根本就不能被转换成 image 数值。nchar 只能显式地转换成 binary,隐性地转换到 binary 是不支持的。nchar 可以显式地或者隐性地转换成 nvarchar。 当处理 sql_variant 数据类型时,SQL Server 支持将具有其它数据类型的对象隐性转换成 sql_variant 类型。然而,SQL Server 并不支持从 sql_variant 数据隐性地转换到其它数据类型的对象

以上就是关于SQL中CAST和CONVERT的区别是什么全部的内容,包括:SQL中CAST和CONVERT的区别是什么、C#中,Convert.ToDateTime怎样用、timit数据库里sphere文件怎么用convert转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9835697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存