GVKun编程网logo

不区分大小写的COLLATE在Oracle中等效(oracle不区分大小写的查询)

6

最近很多小伙伴都在问不区分大小写的COLLATE在Oracle中等效和oracle不区分大小写的查询这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展C#WinForm登录界面的图片

最近很多小伙伴都在问不区分大小写的COLLATE在Oracle中等效oracle不区分大小写的查询这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)、Golang中不区分大小写的字符串搜索、GORM golang SQL 查询执行不区分大小写的搜索不起作用、Hibernate注释-不区分大小写的UniqueConstraint等相关知识,下面开始了哦!

本文目录一览:

不区分大小写的COLLATE在Oracle中等效(oracle不区分大小写的查询)

不区分大小写的COLLATE在Oracle中等效(oracle不区分大小写的查询)

在Microsoft SQL Server中,如果要在不区分大小写的数据库中进行不区分大小写的搜索,则可以运行以下SQL:

SELECT * FROM MyTableWHERE MyField = ''BobDillon'' COLLATE Latin1_General_CI_AI

这将找到所有“ bobdillon”条目。

如果我想在Oracle中做同样的事情,我知道我可以这样做:

SELECT * FROM MyTableWHERE UPPER(MyField) = ''BOBDILLON''

但是我想知道是否存在与collat​​e关键字直接等效的方法,因此我可以根据需要搜索区分大小写和重音符号。

答案1

小编典典
SELECT *FROM MyTableWHERE NLSSORT(MyField, ''NLS_SORT = Latin_CI'') = NLSSORT(''BobDillon'', ''NLS_SORT = Latin_CI'')

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

一、功能界面

图1 验证码(区分大小写)

图2 验证码(不区分大小写)

二、创建一个产生验证码的类Class1

(1)生成随机验证码字符串,用的是Random随机函数
(2)创建验证码图片,将该字符串画在PictureBox控件中

Class1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;//图片
using System.Windows.Forms;

namespace ValidCodeTest
{
  public class Class1
  {
    #region 验证码功能      
    /// <summary>
    /// 生成随机验证码字符串
    /// </summary>
    public static string CreateRandomCode(int CodeLength) 
    {
      int rand;
      char code;
      string randomCode = String.Empty;//随机验证码
     	
     	//生成一定长度的随机验证码    
      //Random random = new Random();//生成随机数对象
      for (int i = 0; i < CodeLength; i++)
      {
        //利用GUID生成6位随机数   
        byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
        int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
        Random random = new Random(seed);//以生成的整数作为随机种子
        rand = random.Next();

        //rand = random.Next();   
        if (rand % 3 == 1)
        {
          code = (char)(''A'' + (char)(rand % 26));
        }
        else if (rand % 3 == 2)
        {
          code = (char)(''a'' + (char)(rand % 26));          
        }
        else
        {
          code = (char)(''0'' + (char)(rand % 10));
        }
        randomCode += code.ToString();
      }
      return randomCode;
    }

    /// <summary>
    /// 创建验证码图片
    /// </summary>
    public static void CreateImage(string strValidCode, PictureBox pbox)
    {
      try
      {
        int RandAngle = 45;//随机转动角度
        int MapWidth = (int)(strValidCode.Length * 21);
        Bitmap map = new Bitmap(MapWidth, 28);//验证码图片—长和宽

				//创建绘图对象Graphics
        Graphics graph = Graphics.FromImage(map);
        graph.Clear(Color.AliceBlue);//清除绘画面,填充背景色
        graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
        graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
        Random rand = new Random();
        //背景噪点生成
        Pen blackPen = new Pen(Color.LightGray, 0);
        for (int i = 0; i < 50; i++)
        {
          int x = rand.Next(0, map.Width);
          int y = rand.Next(0, map.Height);
          graph.DrawRectangle(blackPen, x, y, 1, 1);
        }
        //验证码旋转,防止机器识别
        char[] chars = strValidCode.ToCharArray();//拆散字符串成单字符数组
        //文字居中
        StringFormat format = new StringFormat(StringFormatFlags.NoClip);
        format.Alignment = StringAlignment.Center;
        format.LineAlignment = StringAlignment.Center;
        //定义颜色
        Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        //定义字体
        string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
        for (int i = 0; i < chars.Length; i++)
        {
          int cindex = rand.Next(7);
          int findex = rand.Next(5);
          Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
          Brush b = new System.Drawing.SolidBrush(c[cindex]);
          Point dot = new Point(16, 16);

          float angle = rand.Next(-RandAngle, RandAngle);//转动的度数
          graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
          graph.RotateTransform(angle);
          graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);

          graph.RotateTransform(-angle);//转回去
          graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置
        }
        pbox.Image = map;
      }
      catch (ArgumentException)
      {
        MessageBox.Show("验证码图片创建错误");
      }
    }
    #endregion
  }
}

三、调用

(1)更新验证码
(2)验证(区分大小写)
(3)验证(不区分大小写)

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ValidCodeTest;

namespace ValidCode
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }


    #region 验证码
    private const int ValidCodeLength = 4;//验证码长度    
    private String strValidCode = "";//验证码            

    //调用自定义函数,更新验证码
    private void UpdateValidCode()
    {
      strValidCode = Class1.CreateRandomCode(ValidCodeLength);//生成随机验证码
      if (strValidCode == "") return;
      Class1.CreateImage(strValidCode, pbox1);//创建验证码图片
    }
    #endregion


    private void pbox1_Click(object sender, EventArgs e)
    {
      UpdateValidCode();//点击更新验证码
    }


    private void Form1_Load(object sender, EventArgs e)
    {
      UpdateValidCode();//加载更新验证码
    }


    /// <summary>
    /// 验证(区分大小写)
    /// </summary>    
    private void btn1_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      char[] ch1 = validcode.ToCharArray();
      char[] ch2 = strValidCode.ToCharArray();
      int Count1 = 0;//字母个数
      int Count2 = 0;//数字个数

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
        for (int i = 0; i < strValidCode.Length; i++)
        {
          if ((ch1[i] >= ''a'' && ch1[i] <= ''z'') || (ch1[i] >= ''A'' && ch1[i] <= ''Z''))//字母
          {
            if (ch1[i] == ch2[i])
            {
              Count1++;
            }
          }
          else//数字
          {
            if (ch1[i] == ch2[i])
            {
              Count2++;
            }
          }

        }

        int CountSum = Count1 + Count2;
        if (CountSum == strValidCode.Length)
        {
          MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
          UpdateValidCode();
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
        else
        {
          MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          UpdateValidCode();//更新验证码
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
      }
      else//验证码为空
      {
        MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        UpdateValidCode();//更新验证码
        txtValidCode.Text = "";
        txtValidCode.Focus();
      }
    }


    /// <summary>
    /// 验证(不区分大小写)
    /// </summary> 
    private void btn2_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
        if (validcode.ToLower() == strValidCode.ToLower())
        {
          MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
          UpdateValidCode();
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
        else
        {
          MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          UpdateValidCode();//更新验证码
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
      }
      else//验证码为空
      {
        MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        UpdateValidCode();//更新验证码
        txtValidCode.Text = "";
        txtValidCode.Focus();
      }
    }
  }
}

.exe测试文件下载: ValidCode_jb51.zip

参考文章:
https://www.jianshu.com/p/d89f22cf51bf

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • C# winform主界面打开并关闭登录界面的方法
  • C# WinForm制作登录界面的实现步骤

Golang中不区分大小写的字符串搜索

Golang中不区分大小写的字符串搜索

如何以 不区分大小写的 方式在文件中搜索单词?

例如

如果我正在UpdaTe文件中搜索,如果文件包含更新,则搜索应将其选中并将其视为匹配项。

答案1

小编典典

strings.EqualFold()可以在忽略大小写的情况下检查两个字符串是否相等。它甚至可以与Unicode一起使用。有关更多信息,请参见http://golang.org/pkg/strings/#EqualFold。

http://play.golang.org/p/KDdIi8c3Ar

package mainimport (    "fmt"    "strings")func main() {    fmt.Println(strings.EqualFold("HELLO", "hello"))    fmt.Println(strings.EqualFold("ÑOÑO", "ñoño"))}

两者都返回true。

GORM golang SQL 查询执行不区分大小写的搜索不起作用

GORM golang SQL 查询执行不区分大小写的搜索不起作用

gorm golang sql 查询执行不区分大小写的搜索不起作用

问题内容

我想在 Golang 中进行不区分大小写的搜索。我正在使用这个库。

我已尝试以下方法,但不起作用。

someId = "abc"
model := abcModel{Id: someId}
result := p.db.Where("lower(id) = lower(?)", someId).Take(&model)
登录后复制
Id is primary-key here
登录后复制

我也尝试过

db.Where("LOWER(id) LIKE LOWER(?)", fmt.Sprintf("%%%s%%", someId)).Take(&model)
登录后复制

有人可以帮忙吗?不确定出了什么问题。任何指示将不胜感激。

立即学习“go语言免费学习笔记(深入)”;

谢谢!

<小时/>

编辑

这就是我在数据库中拥有的内容

id      |          created_at           |          updated_at           | deleted_at |  client_id | ttl  |             client_type              |    token  |          expires_on          
--------------------------------------+-------------------------------+-------------------------------+------------+--------------------------------------+------+--------------------------------------+
        ABC      | 2023-10-30 16:10:59.614132+00 | 2023-10-30 16:10:59.614132+00 |            |  ae30e377  | 100  | 7da0e618-7393-45c2-94dc-5e7b1d6c1610 |   abc     | 2023-10-30 16:27:39.613566+00
登录后复制

我希望上面的查询会在数据库中返回这条记录,因为它是不区分大小写的搜索。

我收到的错误是 record not found https://gorm.io/docs/error_handling.html#ErrRecordNotFound

我正在 Docker 容器中运行 Postgres 服务器。 https://hub.docker.com/_/postgres


正确答案


尚不清楚 p 代表什么,但这里有一个使用 Take() 和 Where().Take() 的工作示例:

func main() {
    // open connection to postgres
    db, err := gorm.Open(postgres.New(...), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // Get the row
    someId := "abc"
    var result abcModel
    db.Take(&result, "lower(id) = lower(?)", someId)
    // Print the row
    fmt.Println(result)

    // Find the row using Where
    var result2 abcModel
    db.Where("lower(id) = lower(?)", someId).Take(&result2)
    // Print the row
    fmt.Println(result2)

}
登录后复制

输出:

$ go run .
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}
{ABC 2023-10-30 10:00:57.774905 -0700 PDT 2023-10-30 10:00:57.774905 -0700 PDT <nil> ae30e377 100 7da0e618-7393-45c2-94dc-5e7b1d6c1610 abc 2023-10-30 10:00:57.774906 -0700 PDT}
登录后复制

因此,您的原始代码似乎可以工作,只是您的错误可能与 p 的定义方式有关

以上就是GORM golang SQL 查询执行不区分大小写的搜索不起作用的详细内容,更多请关注php中文网其它相关文章!

Hibernate注释-不区分大小写的UniqueConstraint

Hibernate注释-不区分大小写的UniqueConstraint

我有一个带有以下注释的实体:

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
public class Component extends Model {
    ...
}

是否可以使UniqueConstraint大小写不敏感?我们正在使用PostgreSQL。

关于不区分大小写的COLLATE在Oracle中等效oracle不区分大小写的查询的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)、Golang中不区分大小写的字符串搜索、GORM golang SQL 查询执行不区分大小写的搜索不起作用、Hibernate注释-不区分大小写的UniqueConstraint的相关知识,请在本站寻找。

本文标签: