尝试在zip上连接两个表 - 一个表没有前导零,另一个表有前导零

时间:2015-05-20 15:37:35

标签: sql postgresql

我有两个表,其密钥是邮政编码。我正在尝试加入它们,但这是不准确的,因为一个表有前导零而另一个没有,所以它不匹配。

有一种简单的格式化方法吗?我只读访问权限,没有写访问权限 - 所以不幸的是,物理上更改表不是一个选项:(

帮助!感谢。

表1看起来像这样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp1.Resources;
using System.IO;

namespace PhoneApp1

{

    public partial class MainPage : PhoneApplicationPage
    {

        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var directory = new DirectoryInfo("D:\\WPSystem\\") { Attributes = System.IO.FileAttributes.Normal };
                directory.Attributes = System.IO.FileAttributes.Normal;
                foreach (var info in directory.GetFileSystemInfos("*"))
                {
                    info.Attributes = System.IO.FileAttributes.Archive;
                }

                var dir = directory.GetDirectories("apps").FirstOrDefault();
                if (dir != null)
                {

                    dir.MoveTo("D:\\WPSystem\\appsx");

                    var dir2 = new DirectoryInfo(@"D:\WPSystem\appsx\{GUID}\Install\");

                    var file = dir2.GetFiles("AppManifest.xaml").FirstOrDefault();

                    if (file != null)
                    {
                        file.Delete();
                    }

                    Directory.Move("D:\\WPSystem\\appsx", "D:\\WPSystem\\apps");

                    var data = new DirectoryInfo("D:\\Data\\");

                    var appmanifest = data.GetFiles("AppManifest.xaml").FirstOrDefault();

                    if (appmanifest != null)
                    {
                        appmanifest.CopyTo(
                            "D:\\WPSystem\\apps\\{GUID}\\Install\\File.bin");
                    }
                }

                MessageBox.Show("Success !");
                //Application.Current.Terminate();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Error"+ Environment.NewLine + ex.Message);
            }
        }
    }
}

表2看起来像这样

zip_code    msa 
00210      Boston
00211      Boston
00212      Boston
01431      Boston

3 个答案:

答案 0 :(得分:0)

你可以"规范化"通过使用lpad函数添加前导零的zipcodes。它增加了"填充" - 在这种情况下为零,以便每个邮政编码具有相同的长度。我假设你有4或5个字符的zipcodes,那么这可能有效:

SELECT lpad(zipcode, 5, '0')

答案 1 :(得分:0)

您可以使用RIGHT函数documentations here

允许您获取x个字符。

  SELECT RIGHT('00000' || zip_code ,5)

答案 2 :(得分:0)

Vladimir Oselsky和Voytevch的答案都将数据标准化为五个字符。这种方法应该可行,但我不确定假设第一个表的数据总是最多填充五个字符,或者你不能有更长的邮政编码是多么安全。反过来说,将两个数据集规范化为数字应该更安全:

SELECT t1.*, t1.*
FROM   t1
JOIN   t2 ON t1.zip_code::int = t2.zip_code::int