在SQL中怎样实现字符串大小的比较

在SQL中怎样实现字符串大小的比较,第1张

sql里面字符串没有大小之分,只有长度之分,可以比较长度大小,但是想用一条sql语句直接拿到大小结果来说也不太方便,最好是借助程序或者sql脚本来做,我用oracle试了下,用case when函数是可以直接比较大小的,比如第一个值比第二个大输出0,否则输出1:

select (case when len1>len2 then 0 when len1<len2 then 1 end) as res from (
select length('asd') as len1,length('as') as len2 from dual) t

字符串比较,看下面的举个栗子:

Systemoutprintln("aBc"equals("abc"));//false
Systemoutprintln("aBc"equalsIgnoreCase("abc"));//true  忽略大小写的比较
当不知道方法的作用,点进去看源码的注释:可以用翻译工具翻译可以猜个八九不离十
 /
      Compares this {@code String} to another {@code String}, ignoring case
      considerations  Two strings are considered equal ignoring case if they
      are of the same length and corresponding characters in the two strings
      are equal ignoring case
     
      <p> Two characters {@code c1} and {@code c2} are considered the same
      ignoring case if at least one of the following is true:
      <ul>
        <li> The two characters are the same (as compared by the
             {@code ==} operator)
        <li> Applying the method {@link
             javalangCharacter#toUpperCase(char)} to each character
             produces the same result
        <li> Applying the method {@link
             javalangCharacter#toLowerCase(char)} to each character
             produces the same result
      </ul>
     
      @param  anotherString
              The {@code String} to compare this {@code String} against
     
      @return  {@code true} if the argument is not {@code null} and it
               represents an equivalent {@code String} ignoring case; {@code
               false} otherwise
     
      @see  #equals(Object)
     /

c语言中case是和switch一起使用的,构成switch—case语句,进行判断选择,case是用来表示选择结构的。

switch语句的一般形式为:

switch(表达式){

case 常量表达式1:  语句1;

case 常量表达式2:  语句2;

case 常量表达式n:  语句n;

default:  语句n+1;}


其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

扩展资料

任何switch语句都必须遵循以下规则:

1、只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。

2、switch()的参数类型不能为实型 。

3、case标签必须是常量表达式(constantExpression),如42或者"42"。

4、case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。

参考资料来源:百度百科——switch

switch语句中只能用int或者可以转为int的娈量(如char)作参数,
字符串是不行的sc_str()也只是把字符串变成了字符数组,也是不可以用switch来判断的。
另外,要记得用switch语句时,case执行后要加break;跳出,不然所有的case都会执行一遍的。
建议直接比较,代码也不会变多的,如
switch(sc_str()){
case "-": return 'A';
case "-":return 'B';
case "--":return 'C';
可以改为:
if(s=="-")
return 'A';
if(s=="-"")
return 'B';
if(s=="--")
return 'C';

这样用起来还保险

1、可以使用串的IndexOf、LastIndexOf来比较寻找
2、示例:
using System;using SystemCollectionsGeneric;using SystemComponentModel;using SystemData;using SystemDrawing;using SystemText;using SystemWindowsForms; namespace WindowsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string s="Hello world"; if (sIndexOf("l") != 0) { MessageBoxShow(sIndexOf("l")ToString() + " " + sLastIndexOf("l")ToString()); } } }}

对于这个问题,我在我的软件中采用求ASC码值的方法,将每一位的ASC码值加起来,再case of,(因为我们事先知道具体的字符串,要不然,您怎么比较呢?)
我做的例子的unit1窗体如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R dfm}
procedure TForm1Button1Click(Sender: TObject);
var
s:string;
i,j,k:integer;
begin
s := Edit1Text;
j := length(s);
i :=0;
for k :=1 to j do
i := i+ord(s[k]);
case i of
97:messagebox(0,'50','50',mb_ok);{假设为a 97}
98:messagebox(0,'51','51',mb_ok);{假设为b 97}
{常数N:语句N

}
else caption:=inttostr(i);
end;
end;
end
-----------------------------------------------
unit1窗体中,就一个组件,ord()函数是求字符的原始值 ord(s[k]),就是ASC码
-----------------------------------------------


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

原文地址: http://outofmemory.cn/yw/12899936.html

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

发表评论

登录后才能评论

评论列表(0条)

保存