Heim > Datenbank > MySQL-Tutorial > SQLServer学习笔记系列2

SQLServer学习笔记系列2

WBOY
Freigeben: 2016-06-07 15:26:22
Original
1008 Leute haben es durchsucht

一.写在前面的话 继上一次SQLServer学习笔记系列1 http://www.cnblogs.com/liupeng61624/p/4354983.html 以后,继续学习Sqlserver,一步一步走下去,相信努力终会 有收获!一直坚信这句话,这个世界上比你优秀的人很多,他们在你休息的时候,勤勤恳恳的做着我

一.写在前面的话

继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继续学习Sqlserver,一步一步走下去,相信努力终会

有收获!一直坚信这句话,这个世界上比你优秀的人很多,他们在你休息的时候,勤勤恳恳的做着我们看不到的事情,但你回首往事的时候,真心觉得那段奋

斗的岁月让你骄傲!年轻就得折腾,年轻就要奋斗!好啦,进入正题吧!

二.sql的范围内查找

(1)between.....and用法

通常情况下我们查找一个在某固定区域内的所有记录,可以采用>=,

<span>1</span> <span>select</span> * <span>from</span><span> sales.ordervalues
</span><span>2</span> <span>where</span> val>=<span>1000</span> and val2000
Nach dem Login kopieren

查询结果:

SQLServer学习笔记系列2

此处的sales.ordervalues来自于定义的视图,关于视图后续会讲到。

如果采用between.....and.....则可以同样达到效果。

<span>1</span> <span>select</span> * <span>from</span><span> sales.ordervalues
</span><span>2</span> <span>where</span> val between <span>1000</span> and <span>2000</span>
Nach dem Login kopieren

注意一点:between....and.....是包含边界的,即此处包含1000和2000这个边界值。

(2)in 用法

假如要查找1号顾客,2号顾客,9号顾客订单信息,一般情况下,我们会这样写:

<span>1</span> <span>select</span> * <span>from</span><span> sales.ordervalues
</span><span>2</span> <span>where</span> custid=<span>1</span> or custid=<span>2</span> or custid=<span>9</span>
Nach dem Login kopieren

结果为:

SQLServer学习笔记系列2

采用in,则减少了写法的繁杂,可以这样如下写法也能达到要求。

<span>1</span> <span>select</span> * <span>from</span><span> sales.ordervalues
</span><span>2</span> <span>where</span> custid <span>in</span>(<span>1</span>,<span>2</span>,<span>9</span>)
Nach dem Login kopieren

(3)like用法,用来匹配字符或字符串。

假如要查找雇员表Hr.employees里面lastname里包含a的字符。可以这样写:

<span>1</span>  <span>select</span> * <span>from</span><span> Hr.employees
</span><span>2</span>  <span>where</span> lastname like <span>'</span><span>%a%</span><span>'</span>
Nach dem Login kopieren

显示结果为:

SQLServer学习笔记系列2

其中%表示通配符,即可以为任意字符。

三.sql数据类型

sql包含多种数据类型,满足多种开发需求。常见的数据类型包括:

(1)二进制数据类型。

二进制数据包括 Binary、Varbinary 和 Image。
  Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。
  Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。
  Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
  在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。

(2)字符数据类型。

字符数据的类型包括 Char,Varchar 和 Text。
  字符数据是由任何字母、符号和数字任意组合而成的数据。
  Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。

(3)Unicode数据类型

Unicode 数据类型包括 Nchar,Nvarchar 和Ntext。
  在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使
用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 

  在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。

(4)日期和时间数据类型。

日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型。

日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。
  日期的格式可以设定。设置日期格式的命令如下:
  Set DateFormat {format | @format _var|
  其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
  例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式

(5)数字数据类型。

数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数。
  整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是    Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。
  精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
  在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。

在这里说明一点,举例说明:

我们声明一个变量,赋值并打印出来:

<span>1</span>  declare @t <span>char</span>(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @t=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span>  print @t;
Nach dem Login kopieren

当我们继续为@t变量进行字符串连接操作时,此时输出的@t又是什么了?

<span>1</span>  declare @t <span>char</span>(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @t=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span> <span> print @t;
</span><span>4</span>  
<span>5</span>  <span>set</span> @t=@t+<span>'</span><span>world</span><span>'</span><span>;
</span><span>6</span>  print @t
Nach dem Login kopieren

结果如图:

SQLServer学习笔记系列2

此时说明了一点,固定长度char类型,长度是固定的,不足时候用空格补齐,当继续向hello后面添加world时候,由于已经达到最大长度,所以无法添加上

去。此时我们看看使用varchar(10)的情况。

<span>1</span>  declare @t varchar(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @t=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span> <span> print @t;
</span><span>4</span>  
<span>5</span>  <span>set</span> @t=@t+<span>'</span><span>world</span><span>'</span><span>;
</span><span>6</span>  print @t
Nach dem Login kopieren

结果如图所示:

SQLServer学习笔记系列2

所以对比char和varchar,前者是固定长度类型,后者虽然声明了字符长度,但是是可变的。

加入声明变量后,我们不进行复制的话,那么这个变量就为null。null与任何字符或者变量做运算,其结果都为null。

SQLServer学习笔记系列2

为了保证有结果显示,在这里我们学习一个字符串表达式isnull用法。isnull(“变量1”,期望的赋值)。判断变量如果为null,则此变量赋值为期望的赋值。

上述变量未赋值,所以进行字符串连接没有结果,此处我们可以这样处理:

<span>1</span>  declare @t varchar(<span>10</span><span>);
</span><span>2</span> <span> print @t;
</span><span>3</span>  
<span>4</span>  <span>set</span> @t=isnull(@t,<span>''</span>)+<span>'</span><span>world</span><span>'</span><span>;
</span><span>5</span> <span> print @t
</span><span>6</span>  
Nach dem Login kopieren

结果为:

SQLServer学习笔记系列2

 

四.字符串处理函数

(1)求子串substring。

举例说明:对于商品的名称太长,可能我们需要截取主要的信息来看。

SQLServer学习笔记系列2

截取product后面一部分,即采用substring(“字符串”,起始位置,截取长度)。同时需要注意的是:sql下标是从1开始,跟C#里面不一样。不是从0开始计数。

<span>1</span>  <span>select</span> productname,substring( productname,<span>9</span>,<span>10</span><span>)
</span><span>2</span>   <span>from</span> production.products
Nach dem Login kopieren

结果如图所示:

SQLServer学习笔记系列2

(2)left表示从左边截取(从左往右数),right表示从右边截取(从右往左数)。

<span>1</span>  <span>select</span> productname,left( productname,<span>9</span><span>)
</span><span>2</span>   <span>from</span> production.products
Nach dem Login kopieren

SQLServer学习笔记系列2

<span>1</span>  <span>select</span> productname,right( productname,<span>9</span><span>)
</span><span>2</span>   <span>from</span> production.products
Nach dem Login kopieren

SQLServer学习笔记系列2

(3)len返回字符串中的字符数,忽略空格。

<span>1</span>  declare @t <span>char</span>(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @t=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span> <span> print @t;
</span><span>4</span> <span> print len(@t);
</span><span>5</span>  <span>set</span> @t=isnull(@t,<span>''</span>)+<span>'</span><span>world</span><span>'</span><span>;
</span><span>6</span> <span> print @t
</span><span>7</span>  print len(@t)
Nach dem Login kopieren

结果:

SQLServer学习笔记系列2

从结果可以看出,len返回的是字符串中的字符个数。

(4)datalength,返回字符串的实际长度,包括空格。

<span>1</span>  declare @t <span>char</span>(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @t=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span> <span> print @t;
</span><span>4</span> <span> print datalength(@t);
</span><span>5</span>  <span>set</span> @t=isnull(@t,<span>''</span>)+<span>'</span><span>world</span><span>'</span><span>;
</span><span>6</span> <span> print @t
</span><span>7</span>  print datalength(@t)
Nach dem Login kopieren

SQLServer学习笔记系列2

(5)charIndex找出字符串中出现某个匹配字符的位置.

<span>1</span>  
<span>2</span>  <span>select</span> productname,charindex(<span>'</span> <span>'</span>,productname) <span>as</span> N<span>'</span><span>出现空格位置</span><span>'</span>
<span>3</span>  <span>from</span><span> production.products</span>
Nach dem Login kopieren

SQLServer学习笔记系列2

(6)replace替代字符串中某部分内容。

<span>1</span>  <span>select</span> productname,replace(productname,<span>'</span><span>Product</span><span>'</span>,<span>'</span><span>产品名</span><span>'</span><span>)
</span><span>2</span>  <span>from</span> production.products
Nach dem Login kopieren

结果如图所示:

SQLServer学习笔记系列2

(7)stuff替代字符串中从第n个字符开始,数出m个字符,用什么相应字符串替代。

例如:

<span>1</span>  <span>select</span> productname,stuff(productname,<span>8</span>,<span>1</span>,<span>'</span><span>::::</span><span>'</span><span>)
</span><span>2</span>  <span>from</span> production.products
Nach dem Login kopieren

SQLServer学习笔记系列2

(8)大小写转换。upper大写,lower小写。

<span>1</span>   <span>select</span><span> productname,upper(productname),lower(productname)
</span><span>2</span>  <span>from</span> production.products
Nach dem Login kopieren

SQLServer学习笔记系列2

(9)去除空格rtrim,从右边去除空格,ltrim从左边去除空格。

<span>1</span>  declare @s <span>char</span>(<span>10</span><span>);
</span><span>2</span>  <span>set</span> @s=<span>'</span><span>hello</span><span>'</span><span>;
</span><span>3</span>  <span>select</span>  datalength(rtrim(@s));
Nach dem Login kopieren

SQLServer学习笔记系列2

由于sql不存在trim,所以要去除字符串中全部空格在采用:

select ltrim(rtrim(@s));

 

希望各位大牛给出指导,不当之处虚心接受学习!谢谢!

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage