Postgres:选择列值的最大整数子字符串

时间:2015-05-14 15:07:23

标签: sql regex string postgresql substring

我正在使用postgresql,而且我在制定正确的sql查询时遇到了麻烦。这个问题的标题可能听起来很奇怪,但这正是我想要实现的目标。我目前正在使用特定的表执行数据管理。如果我的表产品包含:

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public int companyID { get; set; }

    public virtual CompanyDetails company { get; set; }
}

public class CompanyDetails
{
    [Key]
    public int companyID { get; set; }

    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 1)]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
}

我想做的是:

1)获取的整数子字符串和完全那些名称为且其模式以' IR15A' 。并且通过整数子字符串,表示起始字符串' IR15A'之后的数字。 (1021,1001,1050)

2)获取最大整数子字符串,所以在这种情况下:

id | designation
---------------------
1  | IR15A1021
2  | IR15A1001
3  | IR15A1050
4  | AB100 
5  | AR100

因为所有其他IR15A的最大子串都小于它(1021和1001)。

假设条件正确。

1)IR15A之后的子串总是整数所以不用担心类型,它总是整数。 2)忽略其他指定模式。只是IR15A。

我只是设法获得了#15;%IR15A%'通配符搜索,但我还没有找到任何解决方案来切断整数子串并将其与其他子串进行比较以获得最大值。谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

select max(cast(substring(designation from '....$') as int))
from tab
where designation like 'IR15A%'
  1. 使用IR15A
  2. 仅使用like 'IR15A%'
  3. 使用IR15A删除substring(designation from '....$')
  4. 使用cast
  5. 将其转换为int
  6. 使用max
  7. 获取max()

    Sql Fiddle演示